【问题标题】:Error converting my raw sql into eloquent code将我的原始 sql 转换为雄辩的代码时出错
【发布时间】:2019-03-07 02:24:29
【问题描述】:

各位开发者您好, 我正在尝试将我的查询转换为雄辩的代码,但是当我在其他命令中使用“CASE”命令时,我决定将选择部分插入 DB::raw 但现在我遇到了一些语法错误或访问冲突:1055,这是我的sql:

SELECT pa.id_budget_total,pa.name,CASE WHEN co.budget IS null THEN pa.amount ELSE pa.amount - SUM(co.budget) END AS left 
    FROM budget_total pa LEFT JOIN convening co ON pa.id_budget_total = co.budget_total 
    where pa.status = 1 GROUP BY pa.name

我有点将其转换为 eloquent,但是当我添加 co.budget 时,它告诉我后面的错误代码 co.budget 不是 group by,是的,如果我在 groupBy 中添加它,它不会显示任何错误,但那d 改变整个结果。这是雄辩的代码:

budget_total::select(DB::raw("pa.id_budget_total,pa.name, CASE WHEN co.budget IS null THEN pa.amount ELSE pa.amount - SUM(co.budget) END AS restante"))
->from("budget_total as pa")->leftJoin("convocatoria as co","pa.id_budget_total","=","co.id_budget_total")->where("pa.status", 1)
->groupBy("pa.id_budget_total","pa.name","pa.amount")->get();

【问题讨论】:

  • 请解释一下CASE表达式背后的逻辑。
  • 我正在获取所有相关的召集预算并从总预算中减去它们,但如果没有与总预算相关的召集预算,我只打印总预算(为了不t 得到一个 NULL 值)
  • 是的,我已经在尝试了,谢谢

标签: mysql sql laravel eloquent


【解决方案1】:

一种选择是始终使用ELSE 条件,但随后COALESCENULL 之和为零。

budget_total::select(DB::raw("pa.id_budget_total, pa.name,
    pa.amount - COALESCE(SUM(co.budget), 0) AS restante"))
    ->from("budget_total as pa")
    ->leftJoin("convocatoria as co", "pa.id_budget_total", "=", "co.id_budget_total")
    ->where("pa.status", 1)
    ->groupBy("pa.id_budget_total", "pa.name", "pa.amount")
    ->get();

【讨论】:

  • 非常感谢@Tim,它运行良好!我真的很感激!
  • 好吧,我只需要在 AS restante 之前删除“END”字样才能使其正常工作
猜你喜欢
  • 2017-01-05
  • 1970-01-01
  • 1970-01-01
  • 2016-09-14
  • 2019-05-06
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多