Laravel查询生成器GROUP BY方法以及SKIP和TAKE方法

时间:2019-01-25 09:50:11

标签: laravel query-builder laravel-5.7 laravel-query-builder skip-take

我大约有50000条记录,并通过服务器端处理在Datatable中显示它们。 在我的查询中,我将groupBy()方法和skip()take()方法一起应用。

我希望能够应用限制之后 groupBy(),例如

如果限制为10,则应返回10组而不是10条记录。

DB::table('actions')->whereBetween('timestamp', 
array($dates['startDate'], $dates['endDate']))
->where('shop_name', $shopName)
->skip($start)
->take(10)
->get()
->groupBy('product_id');

通过此查询,我得到10条记录而不是10组。

3 个答案:

答案 0 :(得分:1)

您的查询语句顺序错误。以下应该可以解决问题。请注意,groupBy()位于take()get()之前。

在您的情况下,将在获取记录后进行分组。

DB::table('actions')
    ->whereBetween('timestamp', array($dates['startDate'], $dates['endDate']))
    ->where('shop_name', $shopName)
    ->groupBy('product_id')
    ->skip($start)
    ->take(10)
    ->get()

答案 1 :(得分:0)

尝试省略take(10)并在查询的最后但在limit(10)之前添加get()

答案 2 :(得分:0)

DB::table('actions')
            ->whereBetween('timestamp', array($dates['startDate'], $dates['endDate']))
            ->where('shop_name', $shopName)
            ->get()
            ->groupBy('product_id')
            ->splice($start,$rowperpage);

此命令有效。