Количество запросов в месяц этого года - Laravel 5.8 - PullRequest
0 голосов
/ 26 сентября 2019

Сегодня 9/25/2019

Я пытаюсь отправить запрос своему посетителю только в этом 2019 году.

Тогда я хочу знать, сколько на

1,2,3,4,5,6,7,8,9

Я пытался

$raw = Visitor::query()
->whereYear('created_at', now()->year -1)
->get()
->pluck('created_at');

$data = [];
foreach ($raw as $i=>$date) {
    $data[$i] = Carbon::parse($date)->format('m');
    if(  Carbon::parse($date)->format('m')[0] != 0 ){
        $data[$i] = Carbon::parse($date)->format('m');
    }else{
        $data[$i] = str_replace('0','',Carbon::parse($date)->format('m'));
    }
}

// dd($data);

$dataValues = array_count_values($data);

dd($dataValues);

Я получил

array:5 [▼
  8 => 314
  9 => 916
  10 => 764
  11 => 827
  12 => 765
]

Зачем мне что-то получать в будущем, поскольку в этом месяце только 9 сентября?

Пожалуйста, помогите мне исправить это.

Я надеялся получить что-то вроде этого

array:9 [▼
      0 => 314
      1 => 916
      2 => 764
      3 => 827
      4 => 165
      5 => 225
      6 => 565
      7 => 65
      8 => 1265

    ]

Я хотел бы получить вывод, похожий на массив выше

Ответы [ 2 ]

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

Есть пара вещей, которые вы можете попробовать.

Laravel автоматически превращает created_at в объект Carbon, поэтому, если вы создадите свой запрос следующим образом:

$raw = Visitor
      ::whereYear('created_at', \Carbon::now()->year) <<-- Note 2019, not -1 for 2018
      ->select('created_at')
      ->get();

Здесь вы получите объект с полем даты Carbon, created_at.Тогда вам не нужно будет использовать parse в своих проверках if.

Я подозреваю, что, возможно, ответ на ваш вопрос, однако, заключается в том, что, похоже, вы тянете товары с 2018 года, когда вы хотите 2019. Вы вычли год от этого года в исходном запросе.

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

Вы должны извлечь месяц от даты, затем groubby, и не забывайте выбрать количество:

    Visitor::whereYear('created_at', Carbon::now()->year)
->select(DB::raw("MONTH(created_at) month"),DB::raw("count('month') as vistors_count"))
       ->groupby('month')
       ->get();
...