【问题标题】:Laravel many to many relationships sync() whereLaravel 多对多关系 sync() 其中
【发布时间】: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:那么,你想做什么?

标签: laravel orm relationship


【解决方案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')
猜你喜欢
  • 2018-06-15
  • 2018-01-22
  • 2016-02-26
  • 2016-01-04
  • 2018-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多