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->customviews()->newPivotStatement()->where( 'user_id', $this->id )->update( [ 'default' => 0 ] );
如果我想更新一些关系,而不是全部怎么办?一种方法可以是“也包括未更新的关系”。【参考方案2】:
像这样尝试updateExistingPivot
:
$user->customviews()->updateExistingPivot($customviewId, ['default' => 0]);
【讨论】:
这仅适用于一行。我想更新所有与用户相关的关系..以上是关于Laravel 5 更新所有 Pivot 条目的主要内容,如果未能解决你的问题,请参考以下文章
在 PHP Laravel 5.x 中编辑后如何保存以前的 MySQL 字段条目?
Laravel 管理员更新用户信息,更新自己的管理员帐户信息时重复的电子邮件条目