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