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 天