У меня есть следующее, которое работает как ожидалось:
$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]);