With an eloquent model you can update data simply by calling
$model->update( $data );
But unfortunately this does not update the relationships.
If you want to update the relationships too you will need to assign each value manually and call push() then:
$model->name = $data['name'];
$model->relationship->description = $data['relationship']['description'];
$model->push();
Althrough this works it will become a mess if you have a lot of data to assign.
I am looging for something like
$model->push( $data ); // this should assign the data to the model like update() does but also for the relations of $model
Can somebody please help me out?
You may try something like this, for example a Client
model and an Address
related model:
// Get the parent/Client model
$client = Client::with('address')->find($id);
// Fill and save both parent/Client and it's related model Address
$client->fill(array(...))->address->fill(array(...))->push();
There are other ways to save relation. You may check this answer for more details.
You can implement the observer pattern to catch the "updating" eloquent's event.
First, create an observer class:
class RelationshipUpdateObserver {
public function updating($model) {
$data = $model->getAttributes();
$model->relationship->fill($data['relationship']);
$model->push();
}
}
Then assign it to your model
class Client extends Eloquent {
public static function boot() {
parent::boot();
parent::observe(new RelationshipUpdateObserver());
}
}
And when you will call the update method, the "updating" event will be fired, so the observer will be triggered.
$client->update(array(
"relationship" => array("foo" => "bar"),
"username" => "baz"
));
See the laravel documentation for the full list of events.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With