Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将我的查询限制为每个类别仅获取5个产品?_Php_Sql_Laravel_Laravel 5_Backend - Fatal编程技术网

Php 如何将我的查询限制为每个类别仅获取5个产品?

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

好的,大家好,我为这个问题挣扎了一段时间,所以我需要你们的帮助

所以这里的问题是我有6000多个产品的数据库,我想得到一些特定的类别和它们的子类别,只有与它们相关的产品

下面是我制作的一个示例数组,它存储类别(键是所选的类别ID,数组值是所有子类别ID)

这是我雄辩的问题,以获得所有这些类别的产品

  $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()