You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel分页查询出现1140 GROUP列混用错误求助

解决Laravel查询分页时的1140语法错误问题

我来帮你搞定这个问题,这个1140 Mixing of GROUP columns错误我之前也碰到过,主要和MySQL的ONLY_FULL_GROUP_BY SQL模式或者查询中的隐式分组逻辑有关,下面给你几个可行的解决方案:

方案一:临时调整MySQL的SQL模式(快速验证)

这个错误大多是因为MySQL开启了ONLY_FULL_GROUP_BY模式,它要求查询中SELECT的列要么在GROUP BY里,要么是聚合函数。你可以在Laravel的数据库配置里临时关闭这个模式:

打开config/database.php,找到mysql配置项,添加modes数组:

'connections' => [
    'mysql' => [
        // 其他配置...
        'modes' => [
            'STRICT_TRANS_TABLES',
            'NO_ZERO_IN_DATE',
            'NO_ZERO_DATE',
            'ERROR_FOR_DIVISION_BY_ZERO',
            'NO_ENGINE_SUBSTITUTION',
        ],
    ],
],

修改后记得清除配置缓存:php artisan config:clear

方案二:给查询添加去重,避免重复记录

关联多张表后可能会产生重复的记录,导致Laravel分页逻辑触发隐式分组检查。你可以在查询末尾加上->distinct()来确保每条记录唯一:

$items = Item::select('items.*', 'sc.sub_category_name', 'c.category_name', 'sc.sub_category_slug', 'c.category_slug')
    ->join('sub_categories AS sc', 'sc.sc_id', '=', 'items.sub_category_id')
    ->join('categories AS c', 'c.category_id', '=', 'sc.category_id')
    ->where('items.is_active', 1)
    ->where('sc.is_active', 1)
    ->where('c.is_active', 1)
    ->where('sc.sc_id', $sub_category_id)
    ->distinct() // 新增去重
    ->paginate(1);

另外我帮你补全了join条件里的=号,虽然Laravel会自动处理,但显式写出来更清晰易读。

方案三:显式指定分组字段(符合SQL规范)

如果你的业务逻辑允许,也可以显式按Item的主键分组,这样完全符合ONLY_FULL_GROUP_BY的要求:

$items = Item::select('items.*', 'sc.sub_category_name', 'c.category_name', 'sc.sub_category_slug', 'c.category_slug')
    ->join('sub_categories AS sc', 'sc.sc_id', '=', 'items.sub_category_id')
    ->join('categories AS c', 'c.category_id', '=', 'sc.category_id')
    ->where('items.is_active', 1)
    ->where('sc.is_active', 1)
    ->where('c.is_active', 1)
    ->where('sc.sc_id', $sub_category_id)
    ->groupBy('items.id') // 按Item主键分组
    ->paginate(1);

这个方案是最规范的,因为每个Item对应唯一的子分类和分类记录,分组后不会丢失数据。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:03:44