Ich bin mir nicht ganz sicher, ob ich das verstehe assoziieren Methode in Laravel. Ich verstehe die Idee, aber ich kann es nicht zum Laufen bringen.
Mit diesem (destillierten) Code:
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);
Ich bekomme ein Call to undefined method Illuminate\Database\Query\Builder::associate()
wenn ich versuche, dies auszuführen.
Soweit ich lesen kann, mache ich es genau so, wie es in der Dokumentation steht.
Was mache ich falsch?
Ich muss zugeben, dass, als ich anfing, Laravel zu verwenden, die Beziehungen der Teil waren, für den ich ständig auf die Dokumentation zurückgreifen musste, und selbst dann habe ich es in einigen Fällen nicht ganz richtig verstanden.
Um Ihnen weiter zu helfen, associate()
wird verwendet, um a zu aktualisieren belongsTo()
Beziehung. Wenn Sie sich Ihren Code ansehen, wird die zurückgegebene Klasse von $user->customer()
ist ein hasOne
Beziehungsklasse und enthält nicht die Associate-Methode.
Wenn du es umgekehrt machen würdest.
$user = new User($data);
$customer = new Customer($customerData);
$customer->user()->associate($user);
$customer->save();
Es würde so funktionieren $customer->user()
ist ein belongsTo
Beziehung.
Um dies umgekehrt zu tun, würden Sie zuerst das Benutzermodell und dann das Kundenmodell wie folgt speichern:
$user = new User($data);
$user->save();
$customer = new Customer($customerData);
$user->customer()->save($customer);
Bearbeiten: Es ist möglicherweise nicht erforderlich, das Benutzermodell zuerst zu speichern, aber ich habe das immer getan, nicht sicher warum.
So wie ich es verstehe, ->associate()
kann nur in einer BelongsTo-Beziehung aufgerufen werden. In Ihrem Beispiel also Sie könnte tun $customer->user()->associate($user)
. Um jedoch eine Has*-Beziehung zu „verknüpfen“, verwenden Sie ->save()
so sollte Ihr Code sein $user->customer()->save($customer)