Я заново внедряю код для онлайн-журнала в Laravel 5.8 / MySQL. У меня есть таблица пользователей и таблица документов, которые имеют отношение многих ко многим. Я использую jQuery / Ajax для изменения списка авторов для данной статьи, по сути, используя sync () для загрузки обновленного списка авторов. Сводная таблица содержит столбец целых чисел, определяющий положение этого автора в списке авторов. У меня есть код работает, поскольку он корректно обновляет БД, за исключением того, что коллекция авторов не обновляется после синхронизации ().
Я обошел проблему, создав новое соединение с БД, но я чувствую, что должен быть более эффективный способ сделать это.
Соответствующие разделы моделей:
Бумажная модель
public function authorCollection()
{
return $this->belongsToMany('App\Models\User', 'paperauthors', 'paper_id', 'author_id')->withPivot('notes','authorNum');
}
Модель пользователя
public function papers()
{
return $this->belongsToMany('App\Models\Paper', 'paperauthors', 'author_id', 'paper_id')->withPivot('notes','authorNum');
}
Код для обновления списка авторов:
$sync = array();
// set up array for the sync operation, $authors is derived from the Ajax POST request
foreach($authors as $auth) {
$sync[$auth->id] = ['authorNum'=>intval($auth->authorNum)];
}
$paper->authorCollection()->sync($sync);
$paper->save();
// $paper->authorCollection still has the old data unless I add the following line
$paper = Paper::where('id',$request->id)->first();
Я бы ожидал, что коллекция будет содержать обновленные данные автоматически - есть ли функция, которую я могу использовать для ее обновления, или мне нужно восстановить соединение?