Laravel group使用Carbon - 意外地限制了分组的数组长度

时间:2017-07-18 12:02:06

标签: php mysql laravel eloquent php-carbon

    $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个月的小组。

我无法找到解释为什么它对分组结果的数量实施这些限制的原因。很多人似乎都在使用这种方法按日期分组,但我找不到其他人引用相同的问题。

1 个答案:

答案 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);
});