我正在使用laravel-5.3。我在更新表时遇到一些问题。假设我有两个模型(研究和成员)。两者都有多对多的关系。我有一个名为member_research的数据透视表。此表包含以下列:
因此,当我尝试更新某些研究时,我可能需要更新研究成员及其角色以及其他信息。我实际上是尝试以下方式:
-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();
}
任何人都可以帮助我吗?
答案 0 :(得分:3)
您不应手动更新数据透视表中的ID。
应从数据透视表中删除未链接的相关记录,并应通过在数据透视表中插入新行来定义新关系。
如果您想更新所选成员的角色,可以使用 updateExistingPivot()方法:
$research->members()->updateExistingPivot($memberId, ['role' => $newRole]);
如果要将成员链接到研究并设置角色,请使用 save()方法:
$research->members()->attach($memberId, ['role' => $newRole]);
如果要取消成员与研究的关联,请使用 detach()方法:
$research->members()->detach($memberId);