Невозможно связаться с Laravel

Я не совсем уверен, понимаю ли я метод ассоциирования в Laravel. Я понимаю эту идею, но я не могу заставить ее работать.

С этим (дистиллированным) кодом:

class User { public function customer() { return $this->hasOne('Customer'); } } class Customer { public function user() { return $this->belongsTo('User'); } } $user = new User($data); $customer = new Customer($customerData); $user->customer()->associate($customer); 

Я получаю Call to undefined method Illuminate\Database\Query\Builder::associate() когда я пытаюсь запустить это.

Из того, что я могу читать, я делаю это точно так, как указано в документах.

Что я делаю не так?

Я должен признать, что, когда я впервые начал использовать Laravel, отношения, в которых часть, которую я должен был последовательно ссылаться на документы, и даже тогда, в некоторых случаях, я не совсем понял это правильно.

Чтобы помочь вам, associate() используется для обновления отношения belongsTo() . Глядя на ваш код, возвращаемый класс из $user->customer() является hasOne отношений hasOne и на нем не будет ассоциированного метода.

Если бы вы сделали это наоборот.

 $user = new User($data); $customer = new Customer($customerData); $customer->user()->associate($user); $customer->save(); на $user = new User($data); $customer = new Customer($customerData); $customer->user()->associate($user); $customer->save(); 

Он будет работать, поскольку $customer->user() – это отношение, belongsTo отношению.

Чтобы сделать это, вы сначала сохраните модель пользователя, а затем сохраните модель клиента:

 $user = new User($data); $user->save(); $customer = new Customer($customerData); $user->customer()->save($customer); 

Изменить. Возможно, сначала не нужно сначала сохранять модель пользователя, но я всегда делал это, не зная почему.

Как я понимаю, ->associate() можно вызывать onyl в отношении BelongsTo. Итак, в вашем примере вы можете сделать $customer->user()->associate($user) . Однако, чтобы «связать» отношение Has *, которое вы используете, ->save() , поэтому ваш код должен быть $user->customer()->save($customer)