我有类别和文章表,它们处于多对多的关系。我有模型上建立的关系。与条件建立关系?
如何获取所有类别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();