2017-03-04 9 views
2

2つのモデル(ツアーと場所)との関係が多岐にわたっています。ピボットテーブルのフィールドがいくつか追加されています(それぞれの場所に滞在する曜日と夜間)。
すべてがセットアップされ、正常に動作しています。Laravel Many to Manyモデルを複数回接続する

---------------------------------------------------- 
| 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

は、あなたは、このように、それは一つだけの関係を追加し、モーダルを装着しています。余分な関係が必要な場合は、手動で再度追加する必要があります。

ループが一気に3つ追加されました。今度は4番目の場所を追加しますか?

$location4 = Location::find(4); 

$tour->locations()->attach($location4, [ 
    'days' => $location4->days, 
    'nights' => $location4->nights, 
    'ordering' => $location4->ordering 
]); 

は、上書きを避けるため、データのすべての3セットが含まれていsyncWithoutDetaching()

$tour->locations()->syncWithoutDetaching($location4, [ 
    'days' => $location4->days, 
    'nights' => $location4->nights, 
    'ordering' => $location4->ordering 
]); 
+0

$場所を使用するには、次の '[{ "ID": "1"、 "日": "4"、 "夜" 「5」、「夜」、「5」、「順序付け」:「2」)、「 "」、「1」、「2」、 "id": "1"、 "days": "2"、 "night": "1"、 "ordering": "3"}] 'すべての接続を終了する3.しかし、どうにかして最初の場所を上書きする3番目のものと一緒に。 – MeeDNite

+0

更新プログラムを使用してください。 'syncWithoutDetaching()' – EddyTheDove

+0

場所は動的であり、要求から来ています。私はこのように分ける方法はありません。元のループで 'syncWithoutDetaching'を使用するのでしょうか? – MeeDNite