我试图在不通过groupby添加order列的情况下使用order,仅当我直接从数据库执行订单时才有效,但是从laravel中我得到数据库错误
我做了这个雄辩的代码
Comment::select('product_id')->where('shop_name', $shop)->groupby('product_id')->distinct()->orderBy('created_at')->paginate(12)
它将产生以下查询
从
comments
中选择不同的DISTINCT(product_id),其中shop_name
='shopname'分组,按product_id
的顺序按created_at
递增,上限12偏移0
如果我直接在数据库中摩擦上面的查询,它将起作用
但是,如果我使用Laravel雄辩的代码,则会触发此错误
SQLSTATE [42000]:语法错误或访问冲突:1055 'areviews_areviewzappz.comments.created_at'不在GROUP BY中(SQL: 从
comments
中选择不同的DISTINCT(product_id),其中shop_name
='商店名称'组按product_id
的顺序按created_at
的递增限制12偏移量0)
我该如何解决这个问题?
答案 0 :(得分:2)
问题在于,您最好将ORDER BY包括在GROUP BY列表中,因为这是最佳实践。
当您将sql模式设置为''时,它起作用的原因。但是,Laravel默认情况下(我认为)的Strict为TRUE,
您有2个选项:
有关第二个选项的更多信息:
How can I solve incompatible with sql_mode=only_full_group_by in laravel eloquent?
答案 1 :(得分:0)
您可以在检索到结果之后对它进行分组,而不是在MySQL查询中进行分组-因此您可以在检索到集合之后对集合进行分组,而不是查询本身中的表条目。
Comment::select('product_id')
->where('shop_name', $shop)
->distinct()
->orderBy('created_at')
->paginate(12)
->groupBy('product_id')
Laravel集合groupBy
方法:https://laravel.com/docs/5.7/collections#method-groupby
相关帖子:Laravel Query Buider Group By Not Getting All The Records