我有以下可以正常工作的内容:
$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_frames(id))(SQL: (aircraft_id,created_at,task_id,updated_at)值(1,2019-03-04 22:11:48,12,2019-03-04 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]);
答案 0 :(得分:3)
如果您想传递额外的列,则会误解sync方法的工作方式。您所需要做的就是以以下方式调用sync方法:
Fragment fragment = getSupportFragmentManager().findFragmentByTag(FRAGMENT_TAG);
因此,我们的想法是,如果您要将附加参数传递给数据透视表,则任务ID将成为数组键,并且附加参数将作为数组值发送