$results = Result::orderBy("created_at", "asc")
->whereBetween('created_at', array($from, $to))
->get()
->groupBy(function($date) use($interval) {
return Carbon::parse($date->created_at)->format($interval);
});
我尝试将结果集分组为天/周/月,具体取决于用户在前端选择的内容。
以上工作在将结果返回到组中但是它增加了一个奇怪的限制。
让我们说$from/$to
跨越2年。
如果$interval
是' d'然后它只返回31组(一个月31天)。所以它应该只返回前31天作为小组。
如果$interval
是' W'然后它只返回52组(一年52周)。所以它应该只返回前52周的小组。
如果$interval
是' m'然后它只返回12组(一年12个月)。所以它应该只返回前12个月的小组。
我无法找到解释为什么它对分组结果的数量实施这些限制的原因。很多人似乎都在使用这种方法按日期分组,但我找不到其他人引用相同的问题。
答案 0 :(得分:2)
您需要按X分组然后年份,否则您将两年的值放在同一个存储桶中。
如果您按月分组,那么您最终会得到2017年1月以及2016年1月以来的值,因为它们都匹配相同的格式" M = 01"。
$results = Result::orderBy("created_at", "asc")
->whereBetween('created_at', array($from, $to))
->get()
->groupBy(function($date) use($interval) {
return Carbon::parse($date->created_at)->format("Y ".$interval);
});