Почему не работает groupBy(some_alias)в laravel5?

Есть такой запрос к БД на SQL
SELECT 
    COUNT(*),
    SUBSTRING_INDEX(SUBSTRING_INDEX(`vars`, '"target":"', -1), '"', 1) AS `target`
FROM `table` 
GROUP BY `target`


С ним все в порядке, выполняю его в phpMyAdmin - он делает именно то, что мне надо.

Пытаюсь записать его в реалиях laravel5, но возникает ошибка - "неизвестная колонка target"

$table = $table
    ->select(DB::raw('COUNT(*), SUBSTRING_INDEX(SUBSTRING_INDEX(`vars`, \'"target":"\', -1), \'"\', 1) AS target'))
    ->groupBy('target');


Убираю " ->groupBy('target') " - запрос выполняется без ошибок.

Подскажите, пожалуйста, что я делаю не так и как надо правильно.
Находил такой вариант " ->groupBy(DB::raw('target')) ", но он тоже не работает.
  • Вопрос задан
  • 151 просмотр
Пригласить эксперта
Ответы на вопрос 4
@niksee
попробуй поменять местами " ->groupBy('target') " с ->select(DB::raw('COUNT(*), SUBSTRING_INDEX(SUBSTRING_INDEX(`vars`, \'"target":"\', -1), \'"\', 1) AS target'))
Ответ написан
wielski
@wielski
✔ Совет: Вам помогли? Отметьте ответы решением.
Снимите логи запросов которые выдают ошибку и сразу поймете в чем дело.
Обычно Laravel выполняет вложенные запросы, получая в первую очередь количество записей и связей, а после - сами записи.

Просьба выложить логи, после чего смогу помочь разобраться в ошибке.
Ответ написан
Комментировать
@d-stream
Готовые решения - не подаю, но...
в sql запросе явно указано <выражение> as target

поэтому sql понимает в выражении group by по чему именно группировать

В Laravel выражении - нет колонки с именем target. Но судя по всему там тоже должна прокатить конструкция "...as name" или же "name=<длинное выражение>"
Ответ написан
Комментировать
@nozzy
Symfony, Laravel, SQL
Можно и без реалий Laravel:
DB::select( здесь ваш запрос )
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы