sql >> データベース >  >> RDS >> Mysql

雄弁なものを使用してデータベースの関係に基づいてJSON応答を注文する方法

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



    1. 次および過去14日以内のすべての誕生日を一覧表示するSQL

    2. SQLServerで制約の名前を見つける方法

    3. エンティティフレームワークは、コンパイルのたびに初めてロードするのが非常に遅い

    4. SQLServerデータをCSVファイルにエクスポートする