Laravel 5 更新所有 Pivot 条目

Posted

技术标签:

【中文标题】Laravel 5 更新所有 Pivot 条目【英文标题】:Laravel 5 update all Pivot entries 【发布时间】:2017-02-27 11:53:55 【问题描述】:

我在用户和自定义视图模型之间存在多对多关系:

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable

    /**
     * Customview relation
     * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
     */
    public function customviews ()
    
        return $this->belongsToMany( Customview::class )->withPivot( 'default' );
    

现在,我想更新所有用户的 customview-assignments 并将其默认标志重置为 0。

手动在 SQL 中应该如下所示(数据透视表的名称是 customview_user):

UPDATE `customview_user` SET `default`=0 WHERE `user_id`=<user_id>;

有没有办法做到这一点:

$user->customviews()->...update(['default' => 0]);

【问题讨论】:

【参考方案1】:

你可能已经从这个问题上继续前进了,但为了后代,我还是会回复,因为我是通过 Google 找到这个问题的。

这很hacky,但这可以解决问题:

$user->customviews()
    ->newPivotStatement()
    ->where('user_id', '=', $user->id)
    ->update(array('default' => 0));

【讨论】:

这正是我当时的做法:$this-&gt;customviews()-&gt;newPivotStatement()-&gt;where( 'user_id', $this-&gt;id )-&gt;update( [ 'default' =&gt; 0 ] ); 如果我想更新一些关系,而不是全部怎么办?一种方法可以是“也包括未更新的关系”。【参考方案2】:

像这样尝试updateExistingPivot

$user->customviews()->updateExistingPivot($customviewId, ['default' => 0]);

【讨论】:

这仅适用于一行。我想更新所有与用户相关的关系..

以上是关于Laravel 5 更新所有 Pivot 条目的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 验证更新和保存的差异

在 PHP Laravel 5.x 中编辑后如何保存以前的 MySQL 字段条目?

Laravel 多对多合并 Pivot?

Laravel 管理员更新用户信息,更新自己的管理员帐户信息时重复的电子邮件条目

Laravel 5 如何更新最新数据并获取数据库的真实累积和

Laravel 5.4 - 获取列包含特定字符串的条目