我有類別和文章表,它們處於多對多的關係。我有模型上建立的關係。與條件建立關係?
如何獲取所有類別ID爲1的文章?
我已經試過:
Article::whereHas('category', function ($query) use ($id) {
$query->where('category_id', $id);
})->get();
以上的作品,但似乎笨重,有沒有口才更有效的方式來做到這一點?
我有類別和文章表,它們處於多對多的關係。我有模型上建立的關係。與條件建立關係?
如何獲取所有類別ID爲1的文章?
我已經試過:
Article::whereHas('category', function ($query) use ($id) {
$query->where('category_id', $id);
})->get();
以上的作品,但似乎笨重,有沒有口才更有效的方式來做到這一點?
您可以使用急切的加載技術。
Article::with(['category', function ($query) use ($id) {
$query->where('category_id', $id);
}])->get();
以下groupBy代碼假設Category::find($id)->articles
不是出於任何原因的選項。
groupBy呢?
Article::groupBy('category')
->having('category', $id)
->get();
whereHas
將返回匹配條件的文章,但不會過濾文章,然後在相同條件獲取。因此,您可以創建一個包含約束匿名函數,並將它傳遞給都的whereHas
和with
方法:
$filter = function ($query) use ($categoryId) {
$query->where('category_id', '=', $categoryId);
};
Article::whereHas('category', $filter)
->with(['category' => $filter])
->get();