【问题标题】:Laravel: Eloquent how to update a model and related models in one goLaravel:雄辩的如何一次更新模型和相关模型
【发布时间】:2013-07-30 18:46:50
【问题描述】:

有谁知道是否可以进行以下操作:

假设我们有一个名为 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'
    )
));

像魅力一样工作!

【问题讨论】:

  • 您可以发布您的更新作为对您问题的回答并接受它,而不是作为更新。

标签: laravel laravel-4 eloquent


【解决方案1】:

Eloquent 非常聪明,但我不相信它可以做到这一点。您必须独立更新 User 和 BestFriend。但是一旦你这样做了,Eloquent 确实有方法来连接这两者。

$me = User::find(1);
$bff= BestFriend::find(1);

$me->city = 'amsterdam'; 
$bff->city = 'amsterdam';

$me->bestfriend()->associate($bff);

这当然是假设你的 User 模型有一个看起来像...的函数

public function bestfriend()
{
    return $this->hasOne('BestFriend');
}

【讨论】:

  • 感谢您的回复 :) 我在 Laravel 论坛上找到了一个解决方案并将其发布到我的原始消息中,因此如果其他人搜索相同的内容,他们将立即获得答案 :)
【解决方案2】:

您无需在模型上设置它。您可以像这样在控制器上执行此操作。

$me = User::find(1)->bestFriend()->update(array(
'city' => 'amsterdam',
'bestfriend.city' => 'amsterdam'
));

我只是稍微修改了您的更新。

【讨论】:

  • 我喜欢这个,要试试。
【解决方案3】:

如果您想为两个实体保存相同的城市名称,这将完成这项工作:

$me = User::find(1);

$me->update(array(
    'city' => 'amsterdam',
));

在你的模型中:

public function setCityAttribute($value) 
{
    $this->attributes['city'] = $value;
    $this->bestfriend->city= $value;
    $this->bestfriend->save();
}

【讨论】:

    猜你喜欢
    • 2017-09-23
    • 2014-08-03
    • 2021-08-11
    • 2019-02-12
    • 1970-01-01
    • 2013-06-04
    • 2016-11-26
    • 2016-02-27
    • 2018-02-19
    相关资源
    最近更新 更多