代码之家  ›  专栏  ›  技术社区  ›  Ahmadz Issa

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

  •  0
  • Ahmadz Issa  · 技术社区  · 5 年前

    我试图使用order by而不在groupby中添加order列,它只在我直接从数据库执行时才起作用,但在laravel中,我得到了数据库错误。

    我写了这段雄辩的代码

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

    它将生成以下查询

    从中选择distinct distinct(product_id) comments 哪里 shop_name =“商店名称”分组依据 product_id 按顺序 created_at ASC限制12偏移0

    如果我直接在数据库中摩擦上面的查询,它就会工作。

    但如果我使用Laravel雄辩的代码,它就会引发这个错误

    sqlstate[42000]:语法错误或访问冲突:1055 “areviews”“areviewzappz.comments.created”“不在group by中(sql: 从中选择distinct distinct(product_id) 评论 哪里 店名 =“商店名称”分组依据 产品标识 按顺序 创造在 ASC限制12偏移0)

    我如何解决这个问题?

    2 回复  |  直到 5 年前
        1
  •  2
  •   Petay87    5 年前

    问题是,您应该在分组依据列表中真正包括排序依据,因为这是最佳实践。

    当您处于设置为“”的SQL模式时,它工作的原因。然而,拉拉维尔在默认情况下(我认为)有严格的事实,

    您有两种选择:

    1. 将创建的\u添加到group by子句(推荐)
    2. 将“严格”模式更改为“错误”

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

    How can I solve incompatible with sql_mode=only_full_group_by in laravel eloquent?

        2
  •  0
  •   party-ring    5 年前

    您可以在检索到结果后对集合进行分组,而不是在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