(Laravel)不能与by by一起使用group by

时间:2019-01-07 15:05:29

标签: php mysql database laravel eloquent

我试图在不通过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)

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

问题在于,您最好将ORDER BY包括在GROUP BY列表中,因为这是最佳实践。

当您将sql模式设置为''时,它起作用的原因。但是,Laravel默认情况下(我认为)的Strict为TRUE,

您有2个选项:

  1. 将created_at添加到GROUP BY子句(推荐)
  2. 将严格模式更改为false

有关第二个选项的更多信息:

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