Laravel多对多,多次附加一个模型

时间:2017-03-04 07:48:55

标签: php laravel laravel-5 eloquent relationships

我在两个模型之间有多对多的关系:旅行和地点,我有一些额外的数据透视表字段(每个地点停留的日期和夜晚)。
一切都准备好了,工作得很好。

每个巡回赛都可以有多个位置,重点是,每个巡回赛都可以拥有相同的位置,多次:

----------------------------------------------------
| 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行。 我们怎样才能将单个位置附加到巡视,多次?

此致

1 个答案:

答案 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
]);