簡體   English   中英

Laravel:Eloquent 如何一次性更新模型和相關模型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM