Обновление сводной таблицы в laravel 5.3

Я использую Laravel-5.3. У меня возникли некоторые проблемы с обновлением таблиц. Предположим, у меня есть два модуля (Research и Member). Оба имеют отношения многие ко многим. У меня есть сводная таблица с именем member_research. Эта таблица имеет следующие столбцы:

  • research_id
  • 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();
}

Может кто-нибудь мне помочь?

1 ответ

Решение

Не следует обновлять идентификаторы в сводной таблице вручную.

Связанные записи, которые не связаны, должны быть удалены из сводной таблицы, а новые отношения должны быть определены путем вставки новых строк в сводную таблицу.

Если вы хотите обновить роль для выбранного члена, вы можете использовать метод updateExistingPivot():

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

Если вы хотите связать участника с исследованием и установить роль, используйте метод save():

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

Если вы хотите отсоединить участника от исследования, используйте метод detach():

$research->members()->detach($memberId);
Другие вопросы по тегам