Как построить запрос Laravel с объединениями и суммой? - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь настроить запрос в приложении Laravel, эквивалентный этому:

SELECT SUM(balance), name FROM db.statement_versions
INNER JOIN statements ON statement_versions.statement_id = statements.id
INNER JOIN accounts ON statements.account_id = accounts.id
GROUP BY name;

Этот запрос работает, когда я запускаю его в MySQL Workbench, но когда я пытаюсь перевести его в PHP св построителе запросов Laravel получаю ошибку.В конечном итоге я хочу вернуть все accounts с суммированным балансом statement_versions.balance.Вот мой код прямо сейчас:

public static function query(LensRequest $request, $query)
{
    return $request->withOrdering($request->withFilters(
        $query->select('accounts.name')->sum('statement_versions.balance')
            ->join('statements', 'statement_versions.statement_id', '=', 'statements.id')
            ->join('accounts', 'statements.account_id', '=', 'accounts.id')
            ->orderBy('balance', 'desc')
            ->groupBy('statement_versions.balance', 'accounts.name')
    ));
}

Я пробовал несколько различных вариантов этого, но я получаю ошибку SQLSTATE[42S22]: Column not found: 1054 Unknown column 'statement_versions.balance' in 'field list'.Как я могу решить эту проблему и заставить запрос работать правильно?

1 Ответ

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

Без ваших столов это будет немного сложно, но я надеюсь, что это даст вам путь к тому, чего вы хотите достичь, возможно, будет удача, что это будет работать с первого выстрела:)

DB::table('statement_versions as sv')
  ->select([
    'name',
    DB::raw('sum(balance) as total')
  ])
  ->join('statements as s', 'sv.statement_id', '=', 's.id')
  ->join('accounts as a', 's.account_id', '=', 'a.id')
  ->groupBy('name');
...