Php 如何将我的查询限制为每个类别仅获取5个产品?
好的,大家好,我为这个问题挣扎了一段时间,所以我需要你们的帮助 所以这里的问题是我有6000多个产品的数据库,我想得到一些特定的类别和它们的子类别,只有与它们相关的产品 下面是我制作的一个示例数组,它存储类别(键是所选的类别ID,数组值是所有子类别ID) 这是我雄辩的问题,以获得所有这些类别的产品Php 如何将我的查询限制为每个类别仅获取5个产品?,php,sql,laravel,laravel-5,backend,Php,Sql,Laravel,Laravel 5,Backend,好的,大家好,我为这个问题挣扎了一段时间,所以我需要你们的帮助 所以这里的问题是我有6000多个产品的数据库,我想得到一些特定的类别和它们的子类别,只有与它们相关的产品 下面是我制作的一个示例数组,它存储类别(键是所选的类别ID,数组值是所有子类别ID) 这是我雄辩的问题,以获得所有这些类别的产品 $all_fetched_categories = array_merge(...$products_categories); if (!empty($products_categories
$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个产品,每个主要类别。使用我提供的代码,我无法在查询中进行逻辑限制。使用
其中的获取类别,然后使用获取(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\u fetched\u categories
中有categories id,则无法使用数据库按语法分组。
数据库groupby从每组返回单个项目
您需要使用雄辩的收集方法groupBy()。
通过此方法,您可以根据需要的任何条件筛选组
通过这种方式,您将对所有类别的五种产品进行总体查询,因为Laravel先对类别进行一次查询,然后再对产品进行另一次查询,然后将收到的所有垃圾进行映射。通过这种方式,您可以将产品查询限制为5。不管怎样,我试过了,真的很接近。谢谢您的帮助。@gogbog您可以在该过滤器中添加最新的
,这样它将为您提供最新的5种产品,您也可以使用variable代替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()