我在两个模型之间有多对多的关系:旅行和地点,我有一些额外的数据透视表字段(每个地点停留的日期和夜晚)。
一切都准备好了,工作得很好。
每个巡回赛都可以有多个位置,重点是,每个巡回赛都可以拥有相同的位置,多次:
----------------------------------------------------
| tour_id | location_id | days | nights | ordering |
----------------------------------------------------
| 1 | 1 | 4 | 3 | 1 |
----------------------------------------------------
| 1 | 2 | 5 | 5 | 2 |
----------------------------------------------------
| 1 | 1 | 2 | 1 | 3 |
----------------------------------------------------
所以我们有:
foreach ($locations as $location) {
$tour->locations()->attach($location->id, [
'days' => $location->days,
'nights' => $location->nights,
'ordering' => $location->ordering
]);
}
这将导致仅向数据透视表添加2行。 我们怎样才能将单个位置附加到巡视,多次?
此致
答案 0 :(得分:1)
在你的循环中你附加了模态,因此它只增加了一个关系。如果想要额外的关系,您将不得不再次手动添加。
循环一次性添加全部3个。现在你想添加第四个位置?
$location4 = Location::find(4);
$tour->locations()->attach($location4, [
'days' => $location4->days,
'nights' => $location4->nights,
'ordering' => $location4->ordering
]);
要避免覆盖,请使用syncWithoutDetaching()
$tour->locations()->syncWithoutDetaching($location4, [
'days' => $location4->days,
'nights' => $location4->nights,
'ordering' => $location4->ordering
]);