2017-02-13 6 views
0

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

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

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

+0

Каковы названия ваших моделей и отношений? –

ответ

3

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

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

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

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

Если вы хотите связать элемент в исследования и установить роль, используйте СОХРАНИТЬ () метод:

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

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

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

Спасибо. Я также пробовал метод updateExistingPivot() и sync(). Но все равно не обновляется :( –

+0

Не могли бы вы обновить вопрос с помощью своих моделей и кода текущего контроллера? –