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

Laravel groupBy using Carbon - unexpectedly limiting grouped array length

    $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);
    });

我正在尝试根据用户在前端选择的内容将结果集分组到 days/weeks/months。

以上在 return 分组结果中有效,但它增加了一个奇怪的限制。

假设我的 $from/$to 跨度为 2 年。

如果$interval是'd'那么它只有returns 31组(一个月31天)。所以它应该只 return 前 31 天作为组。

如果$interval是'W'那么它只有returns 52组(一年52周)。所以它应该只 return 前 52 周作为组。

如果$interval是'm'那么它只有returns 12组(一年12个月)。所以它应该只 return 前 12 个月作为组。

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

您需要按 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);
});