首页 >数据库 >mysql教程 >如何解决 Laravel Eloquent 查询中的 sql_mode=only_full_group_by 冲突?

如何解决 Laravel Eloquent 查询中的 sql_mode=only_full_group_by 冲突?

Susan Sarandon
Susan Sarandon原创
2024-11-19 10:12:02936浏览

How to Resolve `sql_mode=only_full_group_by` Conflicts in Laravel Eloquent Queries?

Laravel Eloquent 中与 sql_mode=only_full_group_by 不兼容的问题排查

执行 Laravel Eloquent 查询时,可能会遇到与 sql_mode=only_full_group_by 相关的错误。当查询的 GROUP BY 子句中包含非聚合列时,就会出现此错误。

原因:

该错误是由需要所有列的严格 MySQL 模式引起的在 SELECT 列表中,在 GROUP BY 子句中进行分组或聚合。在提供的 Eloquent 查询中,id 列包含在 SELECT 列表中,但不包含在 GROUP BY 子句中。

解决方案:

首选解决方案是在数据库连接设置中禁用严格的 MySQL 模式。这可以通过将以下内容添加到 config/database.php 文件中来完成:

'mysql' => [
    'strict' => false,
],

替代解决方案:

如果禁用严格模式不是一个选项,您可以修改查询以确保 SELECT 列表中的所有列都已分组或聚合。对于示例查询,可以通过将 Product::raw('COUNT(*) as Product_count') 添加到 SELECT 子句并按 store_id 和 id 进行分组来实现:

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

以上是如何解决 Laravel Eloquent 查询中的 sql_mode=only_full_group_by 冲突?的详细内容。更多信息请关注PHP中文网其他相关文章!

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