在Laravel 5.1中使用sync()将其他数据传递到中间表

时间:2019-03-05 06:18:46

标签: php eloquent laravel-5.1

我有以下可以正常工作的内容:

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

我想在数据透视表中添加“ work_order_id”,所以我完成了以下操作:

  • 以适当的->withPivot('work_order_id')关系将Aircraft添加到TaskbelongsToMany模型中
  • 将查询更新为$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]);

1 个答案:

答案 0 :(得分:3)

如果您想传递额外的列,则会误解sync方法的工作方式。您所需要做的就是以以下方式调用sync方法:

Fragment fragment = getSupportFragmentManager().findFragmentByTag(FRAGMENT_TAG);

因此,我们的想法是,如果您要将附加参数传递给数据透视表,则任务ID将成为数组键,并且附加参数将作为数组值发送