[英]Laravel: Eloquent how to update a model and related models in one go
有誰知道是否可以執行以下操作:
假設我們有一個名為 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'
)
));
奇跡般有效!
您無需在模型上進行設置。 你可以在你的控制器上這樣做。
$me = User::find(1)->bestFriend()->update(array(
'city' => 'amsterdam',
'bestfriend.city' => 'amsterdam'
));
我剛剛修改了你的更新。
雄辯很聰明,但我不相信它能做到這一點。 您必須單獨更新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');
}
如果您想將相同的城市名稱保存到兩個實體,這將完成以下工作:
$me = User::find(1);
$me->update(array(
'city' => 'amsterdam',
));
在你的模型中:
public function setCityAttribute($value)
{
$this->attributes['city'] = $value;
$this->bestfriend->city= $value;
$this->bestfriend->save();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.