【问题标题】:Query Count Monthly of this year - Laravel 5.8今年每月的查询计数 - Laravel 5.8
【发布时间】:2020-01-26 03:57:06
【问题描述】:

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

    ]

我想在上面得到一个类似数组的输出。

【问题讨论】:

    标签: php laravel laravel-5 laravel-5.8 laravel-query-builder


    【解决方案1】:

    您可以尝试几件事。

    Laravel 会自动将 created_at 变成一个 Carbon 对象,所以如果你像这样创建查询:

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

    这里你得到一个带有碳日期字段的对象,created_at。然后,您不需要在 if-checks 中使用 parse

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

    【讨论】:

    • 现在让我试试你的建议。我希望它正在工作。我会告诉你进展如何。
    • 是的,完全正确。这是 2019 年的访客对象集合,提供了 created_at 字段。您可以将该 $raw 放入您的 foreach 并在每个访问者模型上循环并提取创建日期。 foreach ($raw as $visitor) { $month= $visitor-&gt;created_at-&gt;month } 然后你可以像原来一样每月对它们进行计数。按结果或循环或对您来说最简单的方式计数。
    【解决方案2】:

    你应该从日期中提取月份然后是 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();
    

    【讨论】:

    • 我认为您非常很接近。你能只显示计数数组吗?而不是 laravel 对象数组。
    • 我们可以利用 ->pluck() 吗?
    • 可以分享一下返回结果吗?
    • 如何更新您的查询,这样我就不必为每个循环执行一次?
    • 我想看看查询结果
    猜你喜欢
    • 1970-01-01
    • 2020-01-26
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多