予想されるJSONはfoodsを示しています portionsの子として 。これを行うには、この関係を設定する必要があります。
Portion モデルの場合、次の関係を設定する必要があります:
public function foods() {
return $this->hasMany(Food::class);
}
この関係の設定により、次のようなデータを取得できるようになります。
$categories = App\FoodGroup::with('portions.foods')->get();
これにより、食品グループが読み込まれ、次にその部分が食品グループに読み込まれ、次に食品がその部分に読み込まれます。
編集
私はあなたの質問を少し読み間違えたかもしれません。 portionsがあると思いました \App\FoodGroupで定義された関係 。そうでない場合は、次のように追加できます:
FoodGroup:
public function portions() {
// the second parameter is the name of the pivot table.
// in this case, your foods table connects your portions and food groups.
return $this->belongsToMany(Portion::class, 'foods')->distinct();
}
編集2
このソリューションは、foodsを処理しているため、少しハッキーです。 ピボットテーブルとしてのテーブルですが、そのために特別に設計されたものではありません。このため、foodsには複数のエントリがあります 同じキーペア値を含むテーブル。これが、関連するモデルが重複している理由です。
distinct()をスローした場合 関係に、これは内部結合から作成された重複を排除するので、問題を処理する必要があります。上記のコードは変更されています。