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

Laravel中groupBy触发1055错误,常规解决方案无效求助

解决Laravel中GroupBy引发的1055语法错误问题

我来帮你搞定这个头疼的1055错误!你已经尝试了修改strict模式和sql modes,但还是踩坑,大概率是这几个原因:配置没生效,或者你的查询本身不符合MySQL的分组规则,咱们一步步来解决:

1. 先确认MySQL实际生效的sql_mode

有时候你在Laravel里配置了modes,但MySQL的全局配置或者会话级配置还带着ONLY_FULL_GROUP_BY,导致错误依然存在。先在数据库客户端(比如Navicat、phpMyAdmin)里运行这条命令:

SELECT @@sql_mode;

如果结果里还能看到ONLY_FULL_GROUP_BY,说明你的Laravel配置没覆盖成功,或者缓存没清。

2. 确保Laravel配置正确且生效

打开config/database.php,确认mysql连接的配置是这样的:

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'strict' => false, // 这里必须设为false
    'modes' => [
        'STRICT_TRANS_TABLES',
        'NO_ZERO_IN_DATE',
        'NO_ZERO_DATE',
        'ERROR_FOR_DIVISION_BY_ZERO',
        'NO_AUTO_CREATE_USER',
        'NO_ENGINE_SUBSTITUTION',
    ], // 这里绝对不能包含ONLY_FULL_GROUP_BY
    'engine' => null,
],

改完配置后必须清除配置缓存,不然Laravel还是用旧的配置:

php artisan config:clear

重启一下你的服务(比如nginx、php-fpm),确保配置完全生效。

3. 修改你的查询语句(从根源解决问题)

其实即使关闭了ONLY_FULL_GROUP_BY,你的查询逻辑本身也有问题:你按order_id分组,但又要获取id字段(get()会取出所有字段),而同一个order_id可能对应多个id,MySQL不知道该返回哪个id给你,这才是错误的本质。

正确的做法是:要么只选择groupBy里的字段,要么用聚合函数处理其他字段。比如你想获取每个order_id对应的最新记录(按id降序),可以这样写:

$orders = Order::select('order_id', DB::raw('MAX(id) as latest_id'), /* 其他需要的字段,用聚合函数处理 */)
    ->groupBy('order_id')
    ->orderBy('latest_id', 'desc')
    ->get();
dd($orders);

或者如果你需要完整的最新记录,可以用子查询来实现:

$latestOrders = Order::select('*')
    ->whereIn('id', function($query) {
        $query->select(DB::raw('MAX(id)'))
            ->from('orders')
            ->groupBy('order_id');
    })
    ->orderBy('id', 'desc')
    ->get();
dd($latestOrders);

这样既符合MySQL的分组规则,又能拿到你想要的数据,比单纯关闭严格模式更规范。

最后再检查一遍

如果还是报错,先重启你的Laravel服务,再重新运行查询。有时候缓存或者会话的残留会导致配置不生效。

内容的提问来源于stack exchange,提问作者zahid hasan emon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:32:34