Как получить данные по месяцам?Laravel Eloquent - PullRequest
1 голос
/ 26 сентября 2019

Используя столбец created_at, я хочу получить данные в одном запросе :

  • из прошлого года
  • сгруппировать по месяцам


Ожидаемые возвращаемые значения должны:
$data: [
    1 : [
        //datas for january
    ],

    2 : [
        //datas for february
    ],

    //etc.
]


Я пробовал этот запрос:
$data = User::query()
    ->whereYear('created_at', now()->year - 1)
    ->get(function ($q){
        return groupBy(function ($q){
            return Carbon::parse($q->created_at)->format('m');
        });
    });

Но я получаю эту ошибку:

stripos () ожидает, что параметр 1 будет строкой, задан объект

Может кто-нибудь помочь мне правильно запросить это?

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Вложенные функции замыкания с одинаковыми именами переменных приводят в замешательство, вы можете упростить их здесь

$data = User::query()
            ->whereYear('created_at', now()->year - 1)
            ->get()
            ->groupBy(function ($q) {
                return Carbon::parse($q->created_at)->format('m');
            });

См. Документы

0 голосов
/ 26 сентября 2019

Вы должны использовать метод sql MONTH () , чтобы извлечь месяц из даты, а затем использовать groubby. Как это:

 User::query()->select('created_at',  DB::raw('MONTH(created_at) month'))
->whereYear('created_at', now()->subYear())
->groupby('month')
->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...