php - index - No puedo hacer que el asociado de Laravel trabaje.
laravel notifications example (2)
Como lo entiendo, ->associate()
Associate ->associate()
puede ser llamado onyl en una relación BelongsTo. Entonces, en su ejemplo, podría hacer $customer->user()->associate($user)
. Sin embargo, para ''asociar'' una relación Has * se usa ->save()
, por lo que su código debe ser $user->customer()->save($customer)
No estoy seguro si entiendo el método associate en Laravel. Entiendo la idea, pero parece que no puedo hacer que funcione.
Con este código (destilado):
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);
Obtengo una Call to undefined method Illuminate/Database/Query/Builder::associate()
cuando intento ejecutar esto.
Por lo que puedo leer, lo hago exactamente como se indica en los documentos.
¿Qué estoy haciendo mal?
Debo admitir que cuando comencé a usar Laravel las relaciones en las que la parte para la que tenía que referirme constantemente a la documentación era cierto, incluso en algunos casos no lo entendí bien.
Para ayudarlo a usted, belongsTo()
se usa para actualizar una relación belongsTo()
. Al hasOne
su código, la clase devuelta de $user->customer()
es una clase de relación hasOne
y no tendrá el método asociado.
Si tuvieras que hacerlo al revés.
$user = new User($data);
$customer = new Customer($customerData);
$customer->user()->associate($user);
$customer->save();
Funcionaría ya que $customer->user()
belongsTo
$customer->user()
es una relación belongsTo
.
Para hacer esto al revés, primero debe guardar el modelo de usuario y luego guardar el modelo del cliente como:
$user = new User($data);
$user->save();
$customer = new Customer($customerData);
$user->customer()->save($customer);
Edición: Puede que no sea necesario guardar el modelo de usuario primero, pero siempre lo he hecho, no estoy seguro de por qué.