Я пытаюсь обновить записи в сводной таблице, используя Eloquent в Laravel 5.1.
У меня есть 3 таблицы: pages
, resources
и стержень pages_resources
, Это методы отношений:
Модель Page.php
public function resources()
{
return $this->belongsToMany('App\Resource', 'pages_resources', 'id_page', 'id_resource')
->orderBy('ordering', 'asc');
}
Модель Resource.php
public function page()
{
return $this->belongsToMany('App\Page', 'pages_resources', 'id_resource', 'id_page');
}
Теперь я получаю список ресурсов из запроса AJAX POST и хочу изменить их порядок. Я использую findMany
Способ получения коллекции:
$resources = Resource::with('page')->findMany($request->get('order'));
$resources->each(function ($item, $key) {
// Working on $item here
});
и вот где я в тупике. Я пробовал оба sync()
$item->page()->sync([$item->id => ['ordering' => $key+1]], false));
а также updateExistingPivot()
$item->page()->updateExistingPivot($item->id, ['ordering' => $key+1], false);
и хотя первое дает неправильные результаты, последнее не работает по событию (однако сообщение об ошибке не получено. Оно просто молча терпит неудачу);
Использование sync () всегда заканчивается созданием новой записи в сводной таблице с правильным значением для столбца «упорядочивание», но с неправильным значением для ключей. Я попытался использовать что-то другое, чем $ item-> id (который отображается на «id_resource»), но безрезультатно.
Я мог бы сделать что-то не так, хотя отношения выглядят правильно, так как объект Resource имеет
#relations: array:1 [
"page" =>
коллекция, а коллекция страниц в свою очередь показывает сводку:
#relations: array:1 [
"pivot" => Pivot {#318
Как я могу обновить запись сводной таблицы?
Задача ещё не решена.
Других решений пока нет …