按 Laravel 分组?

Group by Laravel?

我有以下查询:

$orders = Order::where(function ($query) use ($request) {

            // Filter by in process delivery
            if ($request->get("status") && $request->get("status") == "2") {
                $query->where('status', "2");
            }

        })->groupBy('created_at')->get();

当我尝试执行此查询时出现错误:

SQLSTATE[42000]: Syntax error or access violation: 1055 'delivery.order.id' isn't in GROUP BY (SQL: select * from `order` group by `created_at`)

有什么问题?

问题是最后的查询 select * from `order` group by `created_at`。它试图 select 每一列,但它只对一列进行分组。您的数据库在 only full group mode 中工作,这意味着所有 selected 字段必须按子句分组(或者必须是聚合函数,如 SUMCOUNT 等)

我不知道您真正想从此查询中获得什么,但您可以像这样手动 select 列:

$orders = Order::where(function ($query) use ($request) {
    if ($request->get("status") && $request->get("status") == "2") {
        $query->where('status', "2");
    }
})->groupBy('created_at')
  //select columns like this
  ->select(\DB::raw('COUNT(*)'), 'created_at')
  ->get();

另一种选择是禁用 full group 模式,但结果会出乎意料,可能这不是您想要的。

在您的 config/database.php 文件中,更改 mysql 配置数组

来自 'strict' => true

'strict' => false

有关此错误的更多信息,请阅读此