Laravel eloquent: Update A Model And its Relationships

后端 未结 2 1163
终归单人心
终归单人心 2020-12-15 23:33

With an eloquent model you can update data simply by calling

$model->update( $data );

But unfortunately this does not update th

相关标签:
2条回答
  • 2020-12-15 23:46

    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.

    0 讨论(0)
  • 2020-12-16 00:00

    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.

    0 讨论(0)
提交回复
热议问题