How to save a model with custom attributes that are not in the database? - Laravel 5.4

Viewed 7969

I have a situation where I have set some custom attributes on a model. These attributes don't exist in the database. When using ->isDirty() on the model I get the custom attributes that don't belong in the database.

Is there some clean way to remove these attrbiutes before saving the model?

$model = SomeModel::find(1);
$model->database_attribute = 'I exists in the database';
$model->custom_not_in_database_attribute = 'I don\'t exists in the database';
$model->save(); // remove dirty on save?!

I can of course just unset them unset($model->custom_not_in_database_attribute), but I like to know if there is a cleaner way to do this?

Something like (not existing) $model->saveOriginalOnly()

3 Answers

An easier way to do is just to add this property as a model's property like this:

class Land extends Eloquent {

public $thisFieldWontBeSavedInDatabase;

//...

}

and it's done.

With this simple declaration, eloquent won't trigger the __set() method to add to the $attributes property. And only the fields in the $attributes property are saved in the database.

Related