好的,大家好,我在这个问题上苦苦挣扎了一段时间,所以我需要您的帮助。
这是我的数据库中有6000多种产品的问题,我想获取一些特定的类别及其子类别,以及仅与之相关的产品。
这是我制作的用于存储类别的示例数组(键是所选的类别ID,而数组的值是所有子类别ID的。)
$products_categories = array(
3 => [
4, 5 , 6
],
10 => [
40, 30, 20
]
);
这是我雄辩的查询,以获取所有具有这些类别的产品。
$all_fetched_categories = array_merge(...$products_categories);
if (!empty($products_categories)) {
$products = Product::query();
$products = $products->with([
'media',
])
->active()
->top()
->whereHas('categories', function ($query) use ($all_fetched_categories) {
$query->whereIn('shop_category_id', $all_fetched_categories);
});
$products = $products->get();
}
所以问题是,每个主要类别我只需要5种产品。使用我提供的代码,我无法在查询中进行逻辑限制。
答案 0 :(得分:0)
使用whereIn
获取类别,然后使用products
过滤器添加take(5)
急切加载。像这样
$total = 5;
$categories = Categories::with(['products' => function($query) use ($total){
$query->latest()->take($total);
},'products.media'])
->whereIn('shop_category_id', $all_fetched_categories)
->get()
假设您在$all_fetched_categories
中有类别ID
答案 1 :(得分:0)
您不能对数据库 group by 语法进行操作。 数据库 group by 返回每个组中的单个项目。
您需要使用雄辩的收集方法 groupBy() 。 通过这种方法,您可以根据需要的条件来过滤组。