我有以下查询:
$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`)
什么是问题?
答案 0 :(得分:2)
答案 1 :(得分:0)
问题是最终查询select * from `order` group by `created_at`
。它试图选择每一列,但其分组只有一列。您的数据库在only full group mode中工作,这意味着所有选定的字段都必须在group by子句中(或者必须是聚合器函数,如SUM
,COUNT
等。
我不知道您真正希望从此查询中获得什么,但您可以像这样手动选择列:
$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
模式,但结果会出乎意料,可能不是您想要的。