Группируйте по месяцам и заказывайте даты на Laravel Eloquent - PullRequest
3 голосов
/ 08 ноября 2019

У меня есть следующий запрос

$months = \App\DATA::select(
    DB::raw('sum(order_value) as `sums`'),
    DB::raw("DATE_FORMAT(created_at,'%M %Y') as months")
)
    ->where("created_at", ">", \Carbon\Carbon::now()->subMonths(6))
    ->groupBy('months')
    ->get();

, который составляет сумму данных за каждый месяц за последние 6 месяцев. Проблема в том, что он выводит даты в алфавитном порядке.

August 2019
July 2019
June 2019
May 2019
November 2019
October 2019
September 2019

Я не могу заказать его с orderBy:

->orderBy('created_at')

из-за следующей проблемы

SQLSTATE [42000]: синтаксическая ошибка илинарушение прав доступа: 1055 Выражение # 1 предложения ORDER BY отсутствует в предложении GROUP BY и содержит неагрегированный столбец

Как его упорядочить по дате?

Ответы [ 3 ]

4 голосов
/ 08 ноября 2019

Попробуйте с max функцией и ->orderBy('createdAt', 'desc').

$months = \App\DATA::select(
       DB::raw('sum(order_value) as `sums`'),
       DB::raw("DATE_FORMAT(created_at,'%M %Y') as months"),
       DB::raw('max(created_at) as createdAt')
)
      ->where("created_at", ">", \Carbon\Carbon::now()->subMonths(6))
      ->orderBy('createdAt', 'desc')
      ->groupBy('months')
      ->get();
0 голосов
/ 08 ноября 2019

Вы можете использовать функцию sort в алфавитном порядке.

И

использовать GroupBy created_at

как

$months = \App\DATA::select(
       DB::raw('sum(order_value) as `sums`'),
       DB::raw("DATE_FORMAT(created_at,'%M %Y') as months"),
       DB::raw('max(created_at) as createdAt')
)
      ->where("created_at", ">", \Carbon\Carbon::now()->subMonths(6))
      ->orderBy('createdAt', 'desc')
      ->groupBy('months')
      ->get();
0 голосов
/ 08 ноября 2019

Просто закажите ваши данные по created_at:

$months = \App\DATA::select(
    DB::raw('ANY_VALUE(created_at) AS created_at')
    DB::raw('sum(order_value) as `sums`'),
    DB::raw("DATE_FORMAT(created_at,'%M %Y') as months")
)
    ->where("created_at", ">", \Carbon\Carbon::now()->subMonths(6))
    ->orderBy('created_at')
    ->groupBy('months')
    ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...