Обновление сводной таблицы в 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);