首页 >后端开发 >php教程 >如何修复 Laravel Eloquent 中的 SQL_MODE=ONLY_FULL_GROUP_BY 不兼容问题?

如何修复 Laravel Eloquent 中的 SQL_MODE=ONLY_FULL_GROUP_BY 不兼容问题?

Linda Hamilton
Linda Hamilton原创
2024-10-18 12:27:03959浏览

How to Fix SQL_MODE=ONLY_FULL_GROUP_BY Incompatibility in Laravel Eloquent?

修复 Laravel Eloquent 中 SQL_MODE=ONLY_FULL_GROUP_BY 不兼容的问题

Laravel Eloquent 允许进行强大的数据操作操作,但有时在执行查询时可能会遇到错误。其中一个错误与 MySQL 严格模式设置有关,特别是当启用 sql_mode=only_full_group_by 时。

错误:

当您执行如下查询时,您可能会收到错误:

$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 严格模式设置。这可以在 Laravel 应用程序的数据库连接设置中完成:

<code class="php">'connections' => [
    'mysql' => [
        // Behave like MySQL 5.6
        'strict' => false,

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

通过将 strict 设置为 false,您可以有效地禁用 only_full_group_by 模式并允许 SELECT 列表中的非聚合列。

其他提示:

请参阅 Matt Stauffer 的博客文章,了解与此问题相关的更多高级配置选项。禁用 only_full_group_by 可能会对某些类型的查询产生影响,因此您应该在进行更改之前考虑应用程序的要求。

以上是如何修复 Laravel Eloquent 中的 SQL_MODE=ONLY_FULL_GROUP_BY 不兼容问题?的详细内容。更多信息请关注PHP中文网其他相关文章!

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