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

问题描述 投票:1回答: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_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]);

php eloquent laravel-5.1
1个回答
2
投票

如果要传递其他列,则会误解同步方法的工作原理。您所要做的就是将sync方法调用为:

$tasks = array_combine(
    $request['tasks'],
    array_fill(0, count($request['tasks']), ['work_order_id' => $workorder->id])
);

$aircraft->logbook_entries()->sync($tasks);

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

© www.soinside.com 2019 - 2024. All rights reserved.