temas - php laravel templates
Laravel: Elocuente cómo actualizar un modelo y modelos relacionados de una sola vez (2)
¿Alguien sabe si es posible hacer lo siguiente?
Digamos que tenemos un modelo llamado Usuario y un modelo llamado BestFriend. La relación entre el usuario y el mejor amigo es 1: 1.
Me gustaría para estos casos poder hacer algo como esto, cambiar mi ciudad y la ciudad de mi amigo al mismo tiempo.
$me = User::find(1);
$me->update(array(
''city'' => ''amsterdam'',
''bestfriend.city'' => ''amsterdam''
));
Básicamente, me gustaría saber si Eloquent es lo suficientemente inteligente como para entender la relación basada en la clave de la matriz ''bestfriend.city''.
¡Gracias de antemano por cualquier ayuda!
Actualizar:
Encontré la solución en los foros de Laravel, pero también la estoy publicando aquí si alguien más está buscando lo mismo :)
En el modelo que agregues.
// In your model...
public function setBestFriendArrayAttribute($values)
{
$this->bestfriend->update($values);
}
Y luego puedes llamarlo así
$me->update(array(
''city'' => ''amsterdam'',
''BestFriendArray'' => array(
''city'' => ''amsterdam''
)
));
¡Funciona de maravilla!
Elocuente es bastante inteligente, pero no creo que pueda hacer eso. Tendrías que actualizar el usuario y BestFriend de forma independiente. Pero una vez que has hecho eso, Eloquent tiene métodos para adjuntar los dos.
$me = User::find(1);
$bff= BestFriend::find(1);
$me->city = ''amsterdam'';
$bff->city = ''amsterdam'';
$me->bestfriend()->associate($bff);
Esto es, por supuesto, asumiendo que su modelo de usuario tiene una función que se parece a ...
public function bestfriend()
{
return $this->hasOne(''BestFriend'');
}
No necesitas ponerlo en tu modelo. Puedes hacerlo en tu controlador de esta manera.
$me = User::find(1)->bestFriend()->update(array(
''city'' => ''amsterdam'',
''bestfriend.city'' => ''amsterdam''
));
Acabo de modificar tu actualización un poco.