2021-12-29|閱讀時間 ‧ 約 2 分鐘

Laravel Eloquent group by count return wrong value

最近發現在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會是正確的沒錯,但是因為沒分頁去抓所有資料,如果資料量很大會算很久。
分享至
成為作者繼續創作的動力吧!
小弟是一位軟體工程師,樂於幫助他人,撰寫技術文章除了幫助自己複習以外,也希望可以幫助到他人,若文章內容有誤,還請大大不吝給予指教!
從 Google News 追蹤更多 vocus 的最新精選內容從 Google News 追蹤更多 vocus 的最新精選內容

發表回應

成為會員 後即可發表留言