予想される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()
をスローした場合 関係に、これは内部結合から作成された重複を排除するので、問題を処理する必要があります。上記のコードは変更されています。