Laravel eloquent: обновление модели и ее взаимосвязей
С помощью модели eloquent вы можете обновлять данные, просто позвонив
$model->update( $data );
но, к сожалению, это не обновить отношения.
Если вы хотите обновить отношения, вам нужно будет назначить каждое значение вручную и вызвать push () затем:
$model->name = $data['name'];
$model->relationship->description = $data['relationship']['description'];
$model->push();
Althrough это работает, это станет беспорядком, если у вас есть много данных для назначения.
Я looging для чего-то как
$model->push( $data ); // this should assign the data to the model like update() does but also for the relations of $model
кто-нибудь может мне помочь?
2 ответов
можно использовать тег шаблон Observer чтобы поймать событие" обновление " красноречивого.
сначала создайте класс наблюдателя:
class RelationshipUpdateObserver {
public function updating($model) {
$data = $model->getAttributes();
$model->relationship->fill($data['relationship']);
$model->push();
}
}
затем назначьте его своей модели
class Client extends Eloquent {
public static function boot() {
parent::boot();
parent::observe(new RelationshipUpdateObserver());
}
}
и когда вы вызовете метод update, событие "updating" будет запущено, поэтому будет запущен наблюдатель.
$client->update(array(
"relationship" => array("foo" => "bar"),
"username" => "baz"
));
посмотреть документация фреймворк Laravel для полного списка событий.
вы можете попробовать что-то другое, например Client
и Address
модели:
// 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();
есть и другие способы сохранить отношения. Вы можете проверить ответ для получения более подробной информации.