Запрос групповых данных Laravel по месяцам работает с MySQL, но не работает с базой данных PostgreSQL

#laravel #postgresql

#laravel #postgresql

Вопрос:

Я пытаюсь сгруппировать данные по месяцам за текущий год. Приведенный ниже запрос работает с базой данных MySQL, но выдает ошибку при подключении к PostgreSQL.

  $results = DB::table('visits')
        ->select(DB::raw('month(visitdate) month, count(*) data'))
        ->where('team_id', 2)
        ->whereYear('visitdate', now()->year)
        ->groupBy('month')
        ->get();
 

Эта ошибка была сгенерирована:

SQLSTATE[42601]: Синтаксическая ошибка: ОШИБКА 7: синтаксическая ошибка в СТРОКЕ «месяц» или рядом с ней СТРОКА 1: выберите месяц (дата посещения) месяц, подсчитайте () данные из «посещений» w … ^ (SQL: выберите месяц (дата посещения) месяц, подсчитайте () данные из «посещений», где «team_id» = 2 и извлечь (год из «visitdate») = 2021 группа по «месяцу»)

Я попробовал аналогичный запрос с Eloquent и получил те же результаты.

В visitdate столбце хранится дата в формате «2021-01-01», я использую laravel 8 с Breeze

Ответ №1:

month это ключевое слово. Вместо этого вы должны выбрать что-то другое, или заключить это в двойные кавычки, или, в данном случае, просто поставить AS перед ним. Любой из трех должен сработать.