【问题标题】:Laravel 5 update all Pivot entriesLaravel 5 更新所有 Pivot 条目
【发布时间】: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]);

【问题讨论】:

    标签: php sql laravel pivot laravel-query-builder


    【解决方案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]);
    

    【讨论】:

    • 这仅适用于一行。我想更新所有与用户相关的关系..
    猜你喜欢
    • 2016-04-13
    • 2015-12-07
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    相关资源
    最近更新 更多