使用Laravel 10运行原始SQL查询

huangapple go评论100阅读模式
英文:

Run sql raw queries with Laravel 10

问题

我在控制器中有一个小查询要运行,在MySQL Workbench中运行良好

  1. SELECT
  2. subprocess_id,
  3. MAX(CASE WHEN step_no = '1' THEN s_name END) AS first_step,
  4. MAX(CASE WHEN step_no = '2' THEN s_name END) AS second_step,
  5. MAX(CASE WHEN step_no = '3' THEN s_name END) AS third_step,
  6. MAX(CASE WHEN step_no = '4' THEN s_name END) AS fourth_step,
  7. MAX(CASE WHEN step_no = '5' THEN s_name END) AS fifth_step,
  8. MAX(CASE WHEN step_no = '6' THEN s_name END) AS sixth_step
  9. FROM
  10. worksteps
  11. WHERE subprocess_id = 8010
  12. GROUP BY subprocess_id;

尝试将其翻译成Laravel,但没有成功

  1. DB::table("worksteps")
  2. ->select("subprocess_id", DB::raw("MAX(CASE WHEN step_no = '1' THEN s_name END) AS first_step"), DB::raw("MAX(CASE WHEN step_no = '2' THEN s_name END) AS second_step"), DB::raw("MAX(CASE WHEN step_no = '3' THEN s_name END) AS third_step"), DB::raw("MAX(CASE WHEN step_no = '4' THEN s_name END) AS fourth_step"), DB::raw("MAX(CASE WHEN step_no = '5' THEN s_name END) AS fifth_step"), DB::raw("MAX(CASE WHEN step_no = '6' THEN s_name END) AS sixth_step"))
  3. ->where("subprocess_id", "=", 8010)
  4. ->groupBy("subprocess_id")
  5. ->get();

出现以下错误

  1. SQLSTATE[42S22]: Column not found: 1054 Unknown column 'max...

我没有一个名为max的列,我在查询中使用MAX()来避免在一个主ID下存在两个相同的步骤ID时出错。

如何在我的控制器show函数中执行这个查询?

英文:

I have a small query to run in my controller, it works fine in MySQL Workbench

  1. SELECT
  2. subprocess_id,
  3. MAX(CASE WHEN step_no = '1' THEN s_name END) AS first_step,
  4. MAX(CASE WHEN step_no = '2' THEN s_name END) AS second_step,
  5. MAX(CASE WHEN step_no = '3' THEN s_name END) AS thrid_step,
  6. MAX(CASE WHEN step_no = '4' THEN s_name END) AS fourth_step,
  7. MAX(CASE WHEN step_no = '5' THEN s_name END) AS fifth_step,
  8. MAX(CASE WHEN step_no = '6' THEN s_name END) AS sixth_step
  9. FROM
  10. worksteps
  11. where subprocess_id=8010
  12. GROUP BY
  13. subprocess_id;

Trying to translate it to Laravel with no success

  1. DB::table("worksteps")
  2. ->select("subprocess_id", "max (case when step_no = '1' then s_name end) as `first_step`", "max (case when step_no = '2' then s_name end) as `second_step`", "max (case when step_no = '3' then s_name end) as `thrid_step`", "max (case when step_no = '4' then s_name end) as `fourth_step`", "max (case when step_no = '5' then s_name end) as `fifth_step`", "max (case when step_no = '6' then s_name end) as `sixth_step`")
  3. ->where("subprocess_id", "=", 8010)
  4. ->groupBy("subprocess_id")
  5. ->get();

Getting the error

  1. SQLSTATE[42S22]: Column not found: 1054 Unknown column 'max...

I don't have a max column, I used MAX() in the query to avoid error in case there are 2 same steps IDs against one main id.

How could I execute this in my controller show function?

答案1

得分: 0

删除最大函数后的空格。

改为:

max(case

要使空格起作用,您需要使用 --sql-mode=IGNORE_SPACE。请参阅文档

英文:

Remove the space after the max function.

Instead of:

  1. max (case

use:

  1. max(case

To make the space work you would need to use --sql-mode=IGNORE_SPACE. See the docmentation.

答案2

得分: 0

尝试:

  1. DB::table("worksteps")
  2. ->select(
  3. "subprocess_id",
  4. DB::raw("MAX(CASE WHEN step_no = '1' THEN s_name END) AS first_step"),
  5. DB::raw("MAX(CASE WHEN step_no = '2' THEN s_name END) AS second_step"),
  6. DB::raw("MAX(CASE WHEN step_no = '3' THEN s_name END) AS third_step"),
  7. DB::raw("MAX(CASE WHEN step_no = '4' THEN s_name END) AS fourth_step"),
  8. DB::raw("MAX(CASE WHEN step_no = '5' THEN s_name END) AS fifth_step"),
  9. DB::raw("MAX(CASE WHEN step_no = '6' THEN s_name END) AS sixth_step")
  10. )
  11. ->where("subprocess_id", 8010)
  12. ->groupBy("subprocess_id")
  13. ->get();

请注意,这是PHP代码的一部分,用于从数据库中检索特定条件下的数据。如果您需要关于此代码的更多信息,请提出具体问题。

英文:

Try:

  1. DB::table("worksteps")
  2. ->select(
  3. "subprocess_id",
  4. DB::raw("MAX(CASE WHEN step_no = '1' THEN s_name END) AS first_step"),
  5. DB::raw("MAX(CASE WHEN step_no = '2' THEN s_name END) AS second_step"),
  6. DB::raw("MAX(CASE WHEN step_no = '3' THEN s_name END) AS third_step"),
  7. DB::raw("MAX(CASE WHEN step_no = '4' THEN s_name END) AS fourth_step"),
  8. DB::raw("MAX(CASE WHEN step_no = '5' THEN s_name END) AS fifth_step"),
  9. DB::raw("MAX(CASE WHEN step_no = '6' THEN s_name END) AS sixth_step")
  10. )
  11. ->where("subprocess_id", 8010)
  12. ->groupBy("subprocess_id")
  13. ->get();

huangapple
  • 本文由 发表于 2023年6月22日 16:43:41
  • 转载请务必保留本文链接:https://go.coder-hub.com/76530061.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定