首页  >  文章  >  数据库  >  如何解决 Laravel Eloquent 中 MySQL 的'与 sql_mode=only_full_group_by 不兼容”错误?

如何解决 Laravel Eloquent 中 MySQL 的'与 sql_mode=only_full_group_by 不兼容”错误?

DDD
DDD原创
2024-11-22 16:16:47878浏览

How to Resolve MySQL's

解决 Laravel Eloquent 中 MySQL '不兼容 sql_mode=only_full_group_by' 问题

使用 Laravel Eloquent 进行数据库操作时经常遇到的问题是 MySQL 错误“Expression #1” SELECT 列表不在 GROUP BY 子句中并且包含非聚合列[...]。”此错误是由于 MySQL 的严格模式(称为 only_full_group_by)而产生的。

为了举例说明该问题,请考虑以下 Eloquent 查询:

$products = Product::where('status', 1)
            ->where('stock', '>', 0)
            ->where('category_id', '=', $category_id)
            ->groupBy('store_id')
            ->orderBy('updated_at', 'desc')
            ->take(4)
            ->get();

执行此查询可能会导致上述 MySQL 错误。原因是 MySQL 的 only_full_group_by 模式要求 SELECT 列表中的所有列要么是聚合函数(例如 COUNT、SUM),要么包含在 GROUP BY 子句中。但是,在此查询中,id 列不包含在 GROUP BY 子句中,而是存在于 SELECT 列表中。

要解决此问题,一种有效的方法是在数据库连接设置中禁用 MySQL 的严格模式:

'connections' => [
    'mysql' => [
        // Disabling strict mode for MySQL 5.6
        'strict' => false,
    ]
]

或者,您可以将列添加到 GROUP BY子句:

$products = Product::where('status', 1)
            ->where('stock', '>', 0)
            ->where('category_id', '=', $category_id)
            ->groupBy('store_id', 'id')
            ->orderBy('updated_at', 'desc')
            ->take(4)
            ->get();

通过放宽严格模式或调整查询以满足MySQL的要求,您可以消除此错误并成功检索数据。

以上是如何解决 Laravel Eloquent 中 MySQL 的'与 sql_mode=only_full_group_by 不兼容”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn