Laravel 8原生查询按厂商统计产品数量报错求助
解决Laravel 8中GROUP BY导致的SQL 1055错误
这个错误源于MySQL严格SQL模式的约束:SELECT子句里的非聚合列(未使用COUNT/SUM等聚合函数的字段)必须全部出现在GROUP BY子句中。你的查询SELECT了m.manufacturerid、m.name、m.logowidth、m.logoheight这些非聚合字段,但GROUP BY仅指定了p.manufacturer_id,因此触发了1055语法错误。
方法一:修正GROUP BY子句(推荐)
将所有SELECT中的非聚合字段添加到GROUP BY里,由于p.manufacturer_id和m.manufacturerid是关联相等的,直接使用厂商表的字段分组即可:
DB::table('products as p') ->select('m.manufacturerid as id','m.name','m.logowidth','m.logoheight', DB::raw('count(p.id) as total')) ->join('manufacturer as m','m.manufacturerid','=','p.manufacturer_id') ->groupBy('m.manufacturerid', 'm.name', 'm.logowidth', 'm.logoheight') ->orderBy('total', 'DESC') ->limit(5) ->get();
方法二:关闭MySQL严格模式(不推荐)
若暂时不想调整查询逻辑,可修改Laravel数据库配置关闭严格模式,但这会隐藏潜在的数据一致性问题:
找到项目根目录下的config/database.php,修改mysql配置项的strict参数:
'mysql' => [ // 其他配置项... 'strict' => false, ],
内容的提问来源于stack exchange,提问作者Irshad Khan
相关产品推荐
相关产品推荐

