这个问题在这里已经有答案了:
按不工作分组-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)
如何解决这个问题?
2条答案
按热度按时间x7rlezfr1#
问题是,您应该在groupby列表中包含orderby,因为这是最佳实践。
它在sql模式设置为“”时工作的原因。不过,拉威尔默认(我认为)有严格的事实,
您有两种选择:
将创建的\u at添加到GROUPBY子句(推荐)
将strict模式更改为false
关于第二个选项的更多信息:
我如何解决不兼容的sql\u模式=只\u满\u组\u在拉维雄辩?
v64noz0r2#
您可以在检索结果后对其进行分组,而不是在mysql查询中进行分组—因此,您可以在检索集合后对其进行分组,而不是在查询本身中对表项进行分组。
拉威尔系列
groupBy
方法:https://laravel.com/docs/5.7/collections#method-groupby公司相关帖子:laravel查询buider组未获得所有记录