PHP / Laravel,我得到的对象数组包含每条记录的日期时间。
我需要每天每小时生成一次对象的分析。每周一次。
例如:
对于2015年1月1日 - 2015年1月10日的日期范围,我会返回100条记录,所有记录都有日期时间。
在这100条记录中,我需要计算一天中每小时某些事情发生的次数的分析。所以我需要一个能够返回所有记录的对象,比如凌晨1点到凌晨1点59分,凌晨2点到凌晨2点59点等,所以这样的结构呢?
{
1 : {
record1{},
record2{},
record3{},
},
2 : {
record4{},
record5{},
record6{},
}
}...
然后我还需要在一周中的几天计算分析,因此我需要一个包含按星期几排序的记录的对象。所以这样的结构。
{
Monday : {
record1{},
record2{},
record3{},
},
Tuesday : {
record4{},
record5{},
record6{},
}
}...
答案 0 :(得分:1)
您可以使用Laravel的集合$records = YourModel::all();
$byHour = $records->groupBy(function($record) {
return $record->your_date_field->hour;
});
$byDay = $records->groupBy(function($record) {
return $record->your_date_field->dayOfWeek;
});
方法将记录分组以满足您的需求。
$dates
请记住,要使用此代码,您必须在Carbon::parse
模型数组中定义日期字段,以便Eloquent将日期解析为Carbon对象。如果你没有,那么你可以在返回结果之前在函数中使用$byHour = $records->groupBy(function($record) {
$date = Carbon::parse($record->your_date_field);
return $date->hour;
});
,如下所示
$records = YourModel::all();
$byHour = $records->groupBy(function($record) {
return date('H', strtotime($record->your_date_field));
});
$byDay = $records->groupBy(function($record) {
return date('D', strtotime($record->your_date_field));
});
如果你愿意,你可以在没有碳的情况下实现同样的目标
groupBy
ListView
方法将以您想要的格式返回对象集合。
您可以找到有关Laravel馆藏here的更多信息。