【问题标题】:Laravel groupBy Database query Builder not workingLaravel groupBy 数据库查询生成器不起作用
【发布时间】:2016-09-28 09:05:31
【问题描述】:

我在使用 laravel groupBy 的查询中遇到了这个问题,它只是返回一个 groupBy 错误。我已经阅读了有关此的文档,但无法真正弄清楚。我还阅读了同样的问题,指出这是因为 postgreSQL 我需要在 grouBy 子句中包含所有列。我试过了,但它仍然没有返回不同的值。请帮我解决一下这个。下面是我的代码。非常感谢。

控制器功能

 public function index(){
    $purchases = Purchase::groupBy('purchase_order_id')->get();
    return view('purchases/purchases_crud', ['allPurchases' => $purchases]);
}

要查询的表

错误

QueryException in Connection.php line 680:
SQLSTATE[42803]: Grouping error: 7 ERROR: column "purchases.id" must appear
in the GROUP BY clause or be used in an aggregate function
LINE 1: select * from "purchases" group by "purchase_order_id"
^ (SQL: select * from "purchases" group by "purchase_order_id")

【问题讨论】:

  • 你能显示错误信息吗?
  • 在没有 select 的情况下调用模型将返回所有列 *,但您只能使用 sum() 或 group by 内部的列。查看我的编辑...

标签: php postgresql laravel-5.2


【解决方案1】:

您可以通过“purchases.id”添加组或将选择限制为仅需要的操作。

->select("purchase_order_id","purchases.id")

->groupBy("purchases.id") // add if possible

您的案例的聚合应该类似于->select("sum(po_total)")


如果我们按 id 分组,我们会得到所有结果,因为 id 是唯一的,我的错误。你想要这样的东西

DB::table("purchases")->select("purchase_order_id", DB:raw("sum(po_total)"))->groupBy("purchase_order_id")->g‌​et();

经验法则是你要么用 Sum() 选择一个字段,要么把它放在组中

【讨论】:

  • 错误消失但仍返回 4 条记录。它应该返回 2 行吧?
  • $purchases = Purchase::select("purchase_order_id","purchases.id")->groupBy("purchases.id")->get();返回视图('purchases/purchases_crud', ['allPurchases' => $purchases]);
  • 调用未定义的方法 Illuminate\Database\Query\Builder::g‌​et()
  • 尝试 DB::table('purchase')->select... 而不是调用模型。 laravel.com/docs/5.1/queries#ordering-grouping-limit-and-offset
  • SQLSTATE[42703]:未定义列:7 错误:列“sum(po_total)”不存在第 1 行:从“purchases”中选择“purchase_order_id”、“sum(po_total)”... ^ (SQL: select "purchase_order_id", "sum(po_total)" from "purchases" group by "purchase_order_id")
猜你喜欢
  • 2016-07-21
  • 2018-11-25
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
相关资源
最近更新 更多