Laravel小组?

时间:2016-12-17 14:50:38

标签: laravel laravel-5 laravel-5.3

我有以下查询:

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

什么是问题?

2 个答案:

答案 0 :(得分:2)

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

来自'strict' => true

'strict' => false

有关此错误的详细信息,请阅读此answer

答案 1 :(得分:0)

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

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

$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模式,但结果会出乎意料,可能不是您想要的。