按 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 字段必须按子句分组(或者必须是聚合函数,如 SUM
、COUNT
等)
我不知道您真正想从此查询中获得什么,但您可以像这样手动 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
有关此错误的更多信息,请阅读此 。
我有以下查询:
$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 字段必须按子句分组(或者必须是聚合函数,如 SUM
、COUNT
等)
我不知道您真正想从此查询中获得什么,但您可以像这样手动 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
有关此错误的更多信息,请阅读此