是否有人知道是否可以进行以下操作:
假设我们有一个名为User的模型和一个名为BestFriend的模型。用户与最好的朋友之间的关系是1:1。
我希望这些情况能够做到这样的事情,同时改变我的城市和我朋友的城市。
$me = User::find(1);
$me->update(array(
'city' => 'amsterdam',
'bestfriend.city' => 'amsterdam'
));
所以基本上我想知道Eloquent是否足够聪明,能够理解基于数组键'bestfriend.city'的关系。
提前感谢您的帮助!
更新
在Laravel论坛上找到了解决方案,但是如果其他人正在寻找相同的东西,我也会在这里发布:)
在模型中添加
// In your model...
public function setBestFriendArrayAttribute($values)
{
$this->bestfriend->update($values);
}
然后你可以这样称呼它
$me->update(array(
'city' => 'amsterdam',
'BestFriendArray' => array(
'city' => 'amsterdam'
)
));
像魅力一样!
答案 0 :(得分:8)
您不需要在模型上进行设置。你可以在你的控制器上这样做。
$me = User::find(1)->bestFriend()->update(array(
'city' => 'amsterdam',
'bestfriend.city' => 'amsterdam'
));
我刚刚修改了你的更新。
答案 1 :(得分:4)
Eloquent非常聪明,但我不相信它能做到这一点。您必须单独更新User和BestFriend。但是一旦你这样做了,Eloquent确实有附加两者的方法。
$me = User::find(1);
$bff= BestFriend::find(1);
$me->city = 'amsterdam';
$bff->city = 'amsterdam';
$me->bestfriend()->associate($bff);
这当然是假设您的用户模型具有看起来像......
的功能public function bestfriend()
{
return $this->hasOne('BestFriend');
}