2017-07-18 24 views
1
$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); 
    }); 

我想組套的成績成爲天/周/月這取決於用戶選擇的前端。Laravel GROUPBY採用碳 - 意外限流分組數組長度

上述工作在返回組中的結果,但它增加了一個奇怪的限制。

可以說我的$from/$to跨度爲2年。

如果$interval爲'd',那麼它只返回31個組(一個月內31天)。所以它應該只將組織的前31天退回來。

如果$interval爲'W',那麼它只返回52組(一年52周)。所以它應該只會以組的形式返回前52周。

如果$interval是'm',那麼它只返回12組(一年12個月)。所以它應該只能以組的形式返回前12個月。

我無法找到任何解釋爲什麼它實現了分組結果的數量限制。很多人似乎都使用這種方法按日期進行分組,但我無法找到其他人引用相同的問題。

+0

那麼問題是12個月的小組沒有兩年的結果,或者您期望24個月的小組取得成果嗎? – apokryfos

+0

我期待那裏有24組,但它限制爲12 –

回答

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); 
}); 
+0

謝謝,非常感謝! –