我有以下内容,按预期工作:
$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 FOREIGN KEY(work_order_id)REFERENCES work_orders(id))(SQL:插入airframe_logbook_entries(aircraft_id, created_at,task_id,updated_at)values(1,2019-03-04 22:11:48,12:201-03-03 22:11:48))
我按照Laravel 5.1文件:Many To Many Relationships - syncing for convenience说:
同步便利
您还可以使用sync方法构建多对多关联。 sync方法接受要放在中间表上的ID数组。将从中间表中删除不在给定数组中的任何ID。因此,在此操作完成后,只有数组中的ID将存在于中间表中:
$ user-> roles() - > sync([1,2,3]);
您还可以使用ID传递其他中间表值:
$ user-> roles() - > sync([1 => ['expires'=> true],2,3]);
如果要传递其他列,则会误解同步方法的工作原理。您所要做的就是将sync方法调用为:
$tasks = array_combine(
$request['tasks'],
array_fill(0, count($request['tasks']), ['work_order_id' => $workorder->id])
);
$aircraft->logbook_entries()->sync($tasks);
因此,我们的想法是,如果要将其他参数传递给数据透视表,则任务ID将成为数组键,并且附加参数将作为数组值发送