template temas sirve que para how example buy laravel laravel-4 eloquent

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.