Laravel 多对多关联同步操作并携带额外列

5

Laravel版本7.0

我有一个“Team”模型和一个“User”模型,还有一个名为“team_has_users”的表。

“team_has_users”表具有“team_id”,“user_id”和“role”列。

一个用户可以以不同的角色属于一个团队。

例如,一个用户可以作为客户和员工属于一个团队。

在“Team”模型中,我设置了以下关系。

public function users(){
   return $this->belongsToMany(User::class, 'team_has_user', 'team_id', 'user_id')
       ->withPivot('role');
}

当我将用户添加到团队时,它像这样很好地运行。

    $item->users()->attach($request->clients, ['role'=>'client']);
    $item->users()->attach($request->employees, ['role'=>'employee']);

但是,当我要同步它们时,我无法操作。

我尝试搜索并找到了一个类似的函数syncwithoutDetaching,但似乎不适用于我的情况。 team_has_users表可能像这样。

team_id    user_id    role
1           1         client
1           1         employee
1           2         client
1           1         other
...

有人可以帮我吗?

谢谢!

1个回答

5

在使用 attach 方法时,可以像传递其他数组一样传递一个额外的数组。

$item->users()->attach($request->clients, ['role'=>'client']);
$item->users()->attach($request->employees, ['role'=>'employee']);

但是在同步中,你需要在数组内传递枢轴值,我在下面举了一个例子。

$item->roles()->sync([1 => ['role' => 'client'], 2 => ['role' => 'employee']);

请查看文档的同步部分。


谢谢,我不能这样做 $item->users()->sync($request->clients, ['role'=>'client'] 吗? - LoveCoding
我应该单独分割数组吗? - LoveCoding
不可以。在同步中,你必须分配枢轴的值。因此,你需要创建数组。[$clientid=>['role'=>'client'],[$employeeid=>['role'=>'employee']] - Dilip Hirapara
如果$request->clients$request->employees具有相同的ID,则此方法无法正常工作。 - LoveCoding
用户属于团队,对吧?并且用户应该有多个角色。根据数据库设计,您应该有三个表:团队、用户和角色。团队拥有多个用户,用户属于多个角色。 - Dilip Hirapara
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接