2016-08-12 7 views
0

カテゴリテーブルと商品テーブルがありますが、それらは多対多の関係にあります。私はモデルに設定された関係を持っています。条件との関係を取得しますか?

カテゴリIDが1の記事をすべて取得するにはどうすればよいですか?

は、私が試した:

Article::whereHas('category', function ($query) use ($id) { 
     $query->where('category_id', $id); 
    })->get(); 

上記の作品を、しかし不格好だが、これを行うには雄弁で、より効率的な方法はありますか?

答えて

0

eager loading techniqueを使用できます。

Article::with(['category', function ($query) use ($id) { 
     $query->where('category_id', $id); 
    }])->get(); 
0

次のグループのバイコードは、何らかの理由でCategory::find($id)->articlesがオプションではないと仮定しています。

groupByについてはどうですか?

Article::groupBy('category') 
      ->having('category', $id) 
      ->get(); 
0

whereHasは、その条件に一致する記事が返されますが、その後、同じ条件によってフェッチされた記事をフィルタリングしません。そのため、制約が含まれている匿名関数を作成し、両方whereHaswith方法にそれを渡すことができます。

$filter = function ($query) use ($categoryId) { 
    $query->where('category_id', '=', $categoryId); 
}; 

Article::whereHas('category', $filter) 
     ->with(['category' => $filter]) 
     ->get(); 
関連する問題