在laravel 5.3中更新数据透视表

时间:2017-02-13 16:30:09

标签: php database laravel-5 pivot-table laravel-eloquent

我正在使用laravel-5.3。我在更新表时遇到一些问题。假设我有两个模型(研究和成员)。两者都有多对多的关系。我有一个名为member_research的数据透视表。此表包含以下列:

  • research_id
  • member_id
  • 作用

因此,当我尝试更新某些研究时,我可能需要更新研究成员及其角色以及其他信息。我实际上是尝试以下方式:

-fno-strict-aliasing

在这种方法中,角色正在更新。但是当我试图更新member_id时,它无法正常工作。这是代码

$Research = Researches::find($request->id);
$Research->Member->all();

foreach ($Research->member as $id){
    $id->pivot->role = $role;
    $id->pivot->save();
}

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

您不应手动更新数据透视表中的ID。

应从数据透视表中删除未链接的相关记录,并应通过在数据透视表中插入新行来定义新关系。

如果您想更新所选成员的角色,可以使用 updateExistingPivot()方法:

$research->members()->updateExistingPivot($memberId, ['role' => $newRole]);

如果要将成员链接到研究并设置角色,请使用 save()方法:

$research->members()->attach($memberId, ['role' => $newRole]);

如果要取消成员与研究的关联,请使用 detach()方法:

$research->members()->detach($memberId);