Eloquent 按碳日期周数对数组进行分组

Posted

技术标签:

【中文标题】Eloquent 按碳日期周数对数组进行分组【英文标题】:Eloquent group an array by carbon date week & count 【发布时间】:2018-03-04 05:17:57 【问题描述】:

我有一个包含 91 个项目的数组,我希望按周的碳日期对数组项进行分组。

示例数据 -

 Collection #240 ▼
  #items: array:91 [▼
    0 => array:2 [▶]
    1 => array:2 [▼
      "date" => Carbon #278 ▼
        +"date": "2017-06-24 15:02:04.000000"
        +"timezone_type": 3
        +"timezone": "UTC"
      
      "visitors" => 11
    ]

这是我目前的尝试 -

$dataViewQuarterly = $analytics->fetchSessions(Period::days(91))->take(91)->groupBy(function($date) 
        return Carbon::parse($date->date)->format('w');
);

它目前正在这条线上抛出一个Trying to get property of non-object -

return Carbon::parse($date->date)->format('w');

这是最好的方法吗?我应该用这些数据构建一个新数组吗?

【问题讨论】:

哪一行给出了非对象错误? Period::days(91) 它会给什么?是范围查询吗? 那行不通。您基本上是在告诉 mysql 按整数对结果进行分组。 更新问题,周期 91 将 91 个结果返回到数组中,这只是对我想要的结果天数的调用。 如果可能的话,你可以添加 laravel 的 whoops error page 【参考方案1】:

试试这个,我会帮忙,但是我需要查看你的$date 我不确定你有什么?

$dataViewQuarterly = $analytics->fetchSessions(Period::days(91))->take(91)->groupBy(function($date) 
        return Carbon::parse($date->created_at)->format('w');
);

【讨论】:

【参考方案2】:

我创造了一种非碳且非雄辩的做事方式,但它确实有效。由于数据每天都不同,因此滚动了 6 个月,因此我每 7 个项目对数组进行分块这一事实实际上并不会影响数据。

    $dataFetchQuarterly = $analytics->fetchSessions(Period::days(91))->take(91)->toArray();
    $weeks = array_chunk($dataFetchQuarterly, 7);

    $dataViewQuarterly = array();

    foreach($weeks as $index=>$sub_array) 
        $counter = 0;

        foreach($sub_array as $donut) 
            $counter += $donut['visitors'];
        

        $dataViewQuarterly[$index] = $counter;

    

【讨论】:

【参考方案3】:

您可以使用startOfWeek Carbon 方法

$dataViewQuarterly = $analytics->fetchSessions(Period::days(91))->take(91)->groupBy(function($date) 
 return Carbon::parse($date->date)->startOfWeek();
);

【讨论】:

这仍然会引发Trying to get property of non-object 错误 你的集合中有一些对象没有设置date 属性 不,如果我将结果周期从 91 更改为 1,则始终设置日期,这样我只返回一个结果它仍然抛出相同的错误,然后我可以检查日期是否设置在一个结果。 您可能需要在startOfWeek 之后致电toDateString

以上是关于Eloquent 按碳日期周数对数组进行分组的主要内容,如果未能解决你的问题,请参考以下文章

Eloquent - 按“从日期”到“至今”分组,间隔为 1 天

Eloquent 获取按日期分组的最后一条记录

如何对数组中的日期进行分组?

Laravel Eloquent按天分组结果

如何通过 Eloquent 中具有多对多关系的外部表中的列聚合进行分组?

JS数组按日期分组