今年的每月查询计数 - Laravel 5.8

Query Count Monthly of this year - Laravel 5.8

今天是 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

    ]

我想得到类似数组的输出。

您可以尝试几种方法。

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。然后你就不需要在你的 if-checks 中使用 parse 了。

不过,我怀疑您的问题的答案可能是,当您想要 2019 年时,您似乎正在提取 2018 年的项目。您在原始查询中减去了今年的一年。

你应该从日期中提取月份然后分组,并且不要忘记 select 计数:

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