【问题标题】:Laravel Eloquent - updateExistingPivot method - When to use it and howLaravel Eloquent - updateExistingPivot 方法 - 何时使用以及如何使用
【发布时间】:2021-03-18 00:50:23
【问题描述】:

我正在尝试了解一些高级的 eloquent 命令,在 Laravel 官方文档中,我找不到任何关于 updateExistingPivot 方法的提及。

我刚刚在这里找到了一些文档:
https://laravel.com/api/8.x/Illuminate/Database/Eloquent/Relations/Concerns/InteractsWithPivotTable.html#method_updateExistingPivot

有人可以通过一个简单的例子来帮助我理解它吗?

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    经过一番进一步的研究,我找到了我的问题的答案。

    Eloquent updateExistingPivot() 方法的目的也是更新多对多关系的数据透视表上的额外属性。

    此方法接受数据透视记录外键和要更新的属性数组。

    例如,如果我们有一个 User-Message 多对多关系,其中:

    • 一条消息可以发送给多个用户。
    • 一个用户可以收到许多消息。

    /app/User.php

    public function messages()
    {
        return $this->hasMany(Message::class);
    }
    

    /app/Message.php

    public function users()
    {
        return $this->hasMany(User::class);
    }
    

    如果每条消息已发送给用户,我们希望记录其状态。

    所以我们在数据透视表中定义了一个状态属性。

    数据透视表user_message

    • 身份证
    • user_id
    • message_id
    • 状态

    当消息发送给特定用户时,我可以通过这种方式将状态设置为“已发送”:

    $user = User::find(1);
    $messageId = 2;
    $user->messages()->updateExistingPivot($messageId, ['status' => 'sent']);
    

    这将使用 user_id=1 和 message_id=2 将状态属性设置为“已发送”来更新数据透视表行。

    【讨论】:

      猜你喜欢
      • 2021-03-17
      • 1970-01-01
      • 2020-08-13
      • 2017-02-19
      • 2014-06-04
      • 2011-06-07
      • 2017-07-06
      • 2016-02-11
      • 2017-03-04
      相关资源
      最近更新 更多