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中文网其他相关文章!