Ошибка при преобразовании моего исходного SQL в красноречивый код - PullRequest
0 голосов
/ 02 октября 2018

Здравствуйте, разработчики, я пытаюсь преобразовать свой запрос в красноречивый код, но поскольку я использовал команды "CASE" среди других команд, я решил вставить раздел select в 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 не является группойby, и да, он не отображает ошибку, если я добавлю его в groupBy, но это изменит весь результат.Вот это красноречивый код:

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();

1 Ответ

0 голосов
/ 02 октября 2018

Один из вариантов - всегда использовать условие ELSE, но затем COALESCE a NULL сумма до нуля.

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...