(laravel)不能将group by与order by一起使用

h9vpoimq  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(438)

这个问题在这里已经有答案了

按不工作分组-laravel(6个答案)
11个月前关门了。
我尝试使用order by而不在groupby中添加order列,它只在我直接从数据库执行时起作用,但是从laravel得到数据库错误
我做了一个很有说服力的代码

Comment::select('product_id')->where('shop_name', $shop)->groupby('product_id')->distinct()->orderBy('created_at')->paginate(12)

它将生成以下查询
从中选择distinct(产品标识) comments 哪里 shop_name ='shopname'分组依据 product_id 订货人 created_at asc限制12偏移0
如果我直接在数据库中创建上面的查询,它就会工作
但如果我使用laravel雄辩的代码,它会引发这个错误
sqlstate[42000]:语法错误或访问冲突:1055“areviews\u areviewzappz.comments.created\u at”不在group by中(sql:select distinct distinct(product\u id)from) comments 哪里 shop_name ='shopname'分组依据 product_id 订货人 created_at asc限制12(偏移0)
如何解决这个问题?

x7rlezfr

x7rlezfr1#

问题是,您应该在groupby列表中包含orderby,因为这是最佳实践。
它在sql模式设置为“”时工作的原因。不过,拉威尔默认(我认为)有严格的事实,
您有两种选择:
将创建的\u at添加到GROUPBY子句(推荐)
将strict模式更改为false
关于第二个选项的更多信息:
我如何解决不兼容的sql\u模式=只\u满\u组\u在拉维雄辩?

v64noz0r

v64noz0r2#

您可以在检索结果后对其进行分组,而不是在mysql查询中进行分组—因此,您可以在检索集合后对其进行分组,而不是在查询本身中对表项进行分组。

Comment::select('product_id')
   ->where('shop_name', $shop)
   ->distinct()
   ->orderBy('created_at')
   ->paginate(12)
   ->groupBy('product_id')

拉威尔系列 groupBy 方法:https://laravel.com/docs/5.7/collections#method-groupby公司
相关帖子:laravel查询buider组未获得所有记录

相关问题