Est-ce que quelqu'un sait s'il est possible de faire ce qui suit:
Disons que nous avons un modèle appelé User et un modèle appelé d BestFriend. La relation entre l'utilisateur et le meilleur ami est de 1: 1.
J'aimerais que ces cas puissent faire quelque chose comme ça, changer ma ville et la ville de mon ami en même temps.
$me = User::find(1);
$me->update(array(
'city' => 'amsterdam',
'bestfriend.city' => 'amsterdam'
));
Donc, fondamentalement, je voudrais savoir si Eloquent est assez intelligent pour comprendre la relation basée sur la clé de tableau "bestfriend.city".
Merci d'avance pour votre aide!
Mise à jour:
J'ai trouvé la solution sur les forums Laravel mais je la poste ici aussi si quelqu'un d'autre cherche la même chose :)
Dans le modèle que vous ajoutez
// In your model...
public function setBestFriendArrayAttribute($values)
{
$this->bestfriend->update($values);
}
Et puis vous pouvez l'appeler comme ça
$me->update(array(
'city' => 'amsterdam',
'BestFriendArray' => array(
'city' => 'amsterdam'
)
));
Fonctionne comme un charme!
Vous n'avez pas besoin de le définir sur votre modèle. Vous pouvez le faire sur votre contrôleur comme ceci.
$me = User::find(1)->bestFriend()->update(array(
'city' => 'amsterdam',
'bestfriend.city' => 'amsterdam'
));
Je viens de modifier un peu votre mise à jour.
Eloquent est assez intelligent, mais je ne pense pas qu'il puisse faire cela. Vous devez mettre à jour User et BestFriend indépendamment. Mais une fois que vous avez fait cela, Eloquent a des méthodes pour attacher les deux.
$me = User::find(1);
$bff= BestFriend::find(1);
$me->city = 'amsterdam';
$bff->city = 'amsterdam';
$me->bestfriend()->associate($bff);
Cela suppose bien sûr que votre modèle utilisateur possède une fonction qui ressemble à ...
public function bestfriend()
{
return $this->hasOne('BestFriend');
}