Laravel 多对多关系 sync() 其中
Posted
技术标签:
【中文标题】Laravel 多对多关系 sync() 其中【英文标题】:Laravel many to many relationships sync() where 【发布时间】:2016-10-13 08:17:21 【问题描述】:使用 laravel 5.2,我有 2 个模型,称为 order 和 worker(多对多关系)
public function workers()
return $this->belongsToMany('App\Worker')->withTimestamps();
和..
public function orders()
return $this->belongsToMany('App\Order')->withTimestamps();
数据透视表包含名为 assignment 的字段 编号 | order_id | worker_id |作业
我需要 sync() 重新分配分配字段的位置..
$order->workers()->where('assignment','Reassigned')->sync($workers);
这不起作用..
【问题讨论】:
看不懂,$workers
变量的内容是什么
请求中的数组
@HosMercury:你能展示你的$workers
数组吗
$workers = $request->worker; // [2,3,5] 像这样
@HosMercury:那么,你想做什么?
【参考方案1】:
在模型关系中使用withPivotValue
函数
喜欢
public function workersReassigned()
return $this->belongsToMany('App\Worker')->withPivotValue('assignment','Reassigned');
public function workersAnyThingElse()
return $this->belongsToMany('App\Worker')->withPivotValue('assignment','AnyThingElse');
然后像往常一样调用Sync
函数
$order->workersReassigned()->sync($workers);
$order->workersAnyThingElse()->sync($workers);
【讨论】:
这是唯一有效的答案,这也是正确的方法。非常感谢【参考方案2】:如果您有主变量:
如果您有主变量,则关系:
public function workers()
return $this->belongsToMany('App\Worker')->withTimestamps()->withPivot('value', 'value2');
$workers 数组:
$workers[$order_id] = [
... // your pivot variables
'value' => $value,
'created_at' => $created_at,
'updated_at' => $updated_at,
]
如果您没有枢轴变量发送和订单 ID 数组
$order->workers()->where('assignment','Reassigned')->sync([1,2,3]);
编辑:
尝试在新函数中使用 where 子句
public function workersReassigned()
return $this->belongsToMany('App\Worker')->where('assignment','Reassigned')->withTimestamps()->withPivot('value', 'value2');
之后:
$order->workersReassigned()->sync($workers);
【讨论】:
它不起作用..你给我一个关于 withPivot 的想法..但是 where()->sync() 不起作用 我用query builder解决了,希望用elequent 我已经更新了我的答案,试试 where in a new function【参考方案3】:不知道它是否有效(目前无法测试),但请尝试wherePivot
method
$order->workers()->wherePivot('assignment', 'Reassigned')->sync($workers);
【讨论】:
您是否将withPivot
添加到您的关系中? return $this->belongsToMany('App\Order')->withPivot('assignment')->withTimestamps();
直接尝试设置运算符wherePivot('assignment', '=', 'Reassigned')
以上是关于Laravel 多对多关系 sync() 其中的主要内容,如果未能解决你的问题,请参考以下文章