最近發現在laravel中$query->count()回傳的數量居然是錯的,原來是因為如果有下groupBy之後再去count就會得到錯的值,可以發現明顯與count($query->get()) return的數字不一致 (明明總共有100筆,卻回傳只有2筆)。
在需要分頁的情況下,我們不太可能先get()拿到一大包資料再去count()總筆數,雖然total總數會是對的,但這樣會有效能問題。分頁就是為了解決效能問題,所以才要分頁,只需抓出該頁的資料就好。
解決方法如下:
$total = $query->getQuery()->getCountForPagination();
$data = $query->skip($start)->take($length)->get();
->getQuery()->getCountForPagination() 就可以拿到正確的筆數了,後面再去抓那頁的資料。
當然也可以這樣做:
$total = count($query->get());
算出來的total count會是正確的沒錯,但是因為沒分頁去抓所有資料,如果資料量很大會算很久。