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() 其中的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4.1 多对多关系和条件在哪里?

Laravel 多列上的多对多同步()

Laravel 多对多关系查询

Laravel 多对多关系( hasMany 或 belongsToMany )

与 Laravel 的友谊系统:多对多关系

关于symfony的多对多关联关系的字段更新