【问题标题】:Updating Pivot Table in laravel 5.3在 laravel 5.3 中更新数据透视表
【发布时间】:2017-07-01 17:25:51
【问题描述】:

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

  • research_id
  • member_id
  • 角色

因此,当我尝试更新一些研究时,我可能还必须更新研究成员及其角色以及其他信息。我实际上正在尝试以下方式:

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

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

在这种方法中,角色可以很好地更新。但是当我尝试更新 member_id 时它不起作用。这是代码

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

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

谁能帮帮我?

【问题讨论】:

  • 你的模型和关系的名称是什么?

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


【解决方案1】:

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

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

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

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

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

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

如果您想从研究中取消链接成员,请使用 detach() 方法:

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

【讨论】:

  • 谢谢。我也尝试过 updateExistingPivot() 和 sync() 方法。但仍然没有更新:(
  • 你能用你的模型和当前控制器代码更新这个问题吗?
猜你喜欢
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多