首页  >  文章  >  数据库  >  如何修复 Laravel Eloquent 的'SELECT 列表的表达式 #1 不在 GROUP BY 中”MySQL 错误?

如何修复 Laravel Eloquent 的'SELECT 列表的表达式 #1 不在 GROUP BY 中”MySQL 错误?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-19 11:27:02933浏览

How to Fix Laravel Eloquent's

解决 Laravel Eloquent 中 MySQL 的“Expression #1 of SELECT List Not in GROUP BY”错误

Laravel Eloquent 中遇到的常见错误使用 groupBy() 方法时出现“SELECT List 的表达式 #1 不在 GROUP BY 子句中”错误。当非聚合列包含在 SELECT 列表中,而对其他列执行聚合时,通常会发生这种情况。

考虑以下 Laravel Eloquent 查询:

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

执行此查询可能会导致以下错误:

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1
of SELECT list is not in GROUP BY clause and contains nonaggregated
column 'myshop.products.id' which is not functionally dependent on
columns in GROUP BY clause; this is incompatible with
sql_mode=only_full_group_by (SQL: select * from products where
status = 1 and stock > 0 and category_id = 5 group by store_id
order by updated_at desc limit 4)

要解决此问题,请在数据库连接设置中禁用 MySQL 的严格模式。此模式强制执行更严格的 SQL 语法和列分组,这可能与正在执行的查询发生冲突。

修改 config/database.php 文件中的数据库配置:

'connections' => [
    'mysql' => [
        // Behave like MySQL 5.6
        'strict' => false,

        // Behave like MySQL 5.7
        'strict' => true,
    ]
]

设置严格选项设置为 false 以禁用 MySQL 连接中的严格模式。这应该可以解决“SELECT List 的表达式 #1 不在 GROUP BY 中”错误。

有关更高级的配置设置,请参阅 Matt Stauffer 的博客文章。

以上是如何修复 Laravel Eloquent 的'SELECT 列表的表达式 #1 不在 GROUP BY 中”MySQL 错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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