【问题标题】:LARAVEL, ELOQUENT, SQL - groupBy 1LARAVEL, ELOQUENT, SQL - groupBy 1
【发布时间】:2020-06-24 19:35:02
【问题描述】:

当我手动运行以下 SQL 时,我得到了预期的结果。我正在尝试在 Laravel 的 Eloquent 中编写相同的查询,但出现错误:

SQLSTATE[42000]:语法错误或访问冲突:1056 无法在“聚合”上分组(SQL:从 daily_menu 内部连接 ​​meals @ 上选择计数()作为聚合987654323@.id = meals.daily_menu_id left join fruits on fruits.meal_id = meals.id where lodge_id = 1 group by 1)

有效的原始 SQL 查询:

SELECT
   d.id,
   SUM(IF(f.id IS NULL, 0, 1)) AS fruit_count
FROM daily_menu d
  JOIN meals m
    ON d.id = m.daily_menu_id
  LEFT JOIN fruits f
    ON m.id = f.meal_id 
GROUP BY 1

我的 Laravel Eloquent 实现:

$query = $query
    ->select("daily_menu.id", DB::raw("SUM(IF(fruits.id IS NULL, 0, 1)) AS fruit_count"))
    ->join("meals", "daily_menu.id", "=", "meals.daily_menu_id")
    ->leftJoin("fruits", "fruits.meal_id", "=", "meals.id")
    ->groupBy(DB::raw("1"));

【问题讨论】:

    标签: mysql laravel eloquent group-by


    【解决方案1】:
    $query = $query
            ->select("daily_menu.id", DB::raw("SUM(IF(fruits.id IS NULL, 0, 1)) AS fruit_count"))
            ->join("meals", "daily_menu.id", "=", "meals.daily_menu_id")
            ->leftJoin("fruits", "fruits.meal_id", "=", "meals.id")
            ->groupBy(DB::raw("daily_menu.id"));
    

    我不应该使用 1 我应该使用正确的列别名。 相关:Can't fix this: "Cannot group by an aggregate"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-13
      • 2014-12-25
      • 1970-01-01
      • 2022-01-21
      • 2018-07-25
      • 2021-04-21
      • 2021-04-29
      • 1970-01-01
      相关资源
      最近更新 更多