Передача дополнительных данных в промежуточную таблицу с помощью sync () в Laravel 5.1 - PullRequest
0 голосов
/ 05 марта 2019

У меня есть следующее, которое работает как ожидалось:

$aircraft->logbook_entries()->sync($request['tasks']);

Я хочу добавить "work_order_id" в мою сводную таблицу, поэтому я сделал следующее:

  • Добавлено ->withPivot('work_order_id') к моделям Aircraft и Task в соответствующих отношениях belongsToMany
  • Обновлен мой запрос, чтобы он читался $aircraft->logbook_entries()->sync([1 => ['work_order_id' => $workorder->id], $request['tasks']]);

Это не добавляет work_order_id к сводной таблице по желанию.Вместо этого я получаю сообщение об ошибке:

SQLSTATE [23000]: Нарушение ограничения целостности: 1452 Не удается добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (pams_amo.airframe_logbook_entries, CONSTRAINT airframe_logbook_entries_work_order_id_foreign workorder_id_foreign_order_id_foreign_order_id_foreign_order_id_foreign_order_or_id_orign_order)ССЫЛКИ work_orders (id)) (SQL: вставить в значения airframe_logbook_entries (aircraft_id, creation_at, task_id, updated_at) (1, 2019-03-04 22:11:48, 12, 2019-03-04 22:11:48))

Я следовал документам Laravel 5.1: Отношения «многие ко многим» - синхронизация для удобства , которая гласит:

Синхронизация для удобства

Вы также можете использовать метод синхронизации для построения ассоциаций «многие ко многим».Метод синхронизации принимает массив идентификаторов для размещения в промежуточной таблице.Любые идентификаторы, которых нет в данном массиве, будут удалены из промежуточной таблицы.Таким образом, после завершения этой операции в промежуточной таблице будут существовать только идентификаторы в массиве:

$ user-> role () -> sync ([1, 2, 3]);

Вы также можете передавать дополнительные промежуточные значения таблицы с идентификаторами:

$ user-> role () -> sync ([1 => ['expires' => true], 2, 3]);

1 Ответ

0 голосов
/ 05 марта 2019

Вы неправильно поняли, как работает метод синхронизации, если хотите передать дополнительный столбец.Все, что вам нужно сделать, это вызвать метод sync:параметр отправляется как значение массива

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...