2016-03-20 85 views
0

當我嘗試在Laravel 5.2中進行分頁時,出現以下錯誤。方法paginate不存在Laravel 5.2

BadMethodCallException in Macroable.php line 81:方法分頁不確定 不存在。

和代碼:

Illuminate\Contracts\Pagination\Paginator; 
... 
     $count = 0; 
     $gdprecords = Gdprecord::all(); 
     foreach($gdprecords as $gdprecord) { 
      $count++; 
      $Pa = $gdprecord->adultpopulation; 
      $Pc = $gdprecord->childpopulation; 
      $P = $Pa + $Pc; // total population 
      $T = ($gdprecord->gdpcapita * $P) * $gdpratio; // basic income for country 
      if($bi_ratio == 0) { 
       $gdprecord->bi_adult = round($T/$Pa, 2); 
      } else { 
       $gdprecord->bi_adult = round($T/($Pa + ($Pc/$bi_ratio)), 2); 
      } 
      $gdprecord->bi_adult_monthly = round($gdprecord->bi_adult/12, 2); 
      $gdprecord->bi_adult_daily = round($gdprecord->bi_adult/365, 2); 
      if($bi_ratio == 0) { 
       $gdprecord->bi_child = 0; 
      } else { 
       $gdprecord->bi_child = round($gdprecord->bi_adult/$bi_ratio, 2); 
      } 
      $gdprecord->bi_child_monthly = round($gdprecord->bi_child/12, 2); 
      $gdprecord->bi_child_daily = round($gdprecord->bi_child/365, 2);      
     } 
     $sorted_gdprecords = $gdprecords->sortByDesc('bi_adult')->paginate(25); 

我不想分頁,直到陣列已經被排序之後。我如何完成這項工作?

謝謝你,菲利普

+0

你可以添加你的雄辯查詢嗎? – wiesson

+0

@wiesson,它在帖子中,'$ gdprecords = Gdprecord :: all();' –

+0

無聊的答案是,你需要弄清楚如何將你的排序標準添加到查詢中,因爲paginate函數不起作用收藏。無論如何,這是一個最佳實踐,但我意識到這可能會非常困難 - 也許您可以在添加數據時將該信息添加到表中的某些字段中,並基於該字段進行排序?否則,它看起來像你必須編寫自己的分頁,並且因爲它是基於集合的,所以它可能不會很有效。 –

回答

0

這裏是一個解決方案,我發現,從別人那裏借用代碼:

public function paginate($items,$perPage) 
    { 
     $pageStart = \Request::get('page', 1); 
     // Start displaying items from this number; 
     $offSet = ($pageStart * $perPage) - $perPage; 

     // Get only the items you need using array_slice 
     $itemsForCurrentPage = array_slice($items, $offSet, $perPage, true); 

     return new LengthAwarePaginator($itemsForCurrentPage, count($items), $perPage,Paginator::resolveCurrentPage(), array('path' => Paginator::resolveCurrentPath())); 
    } 

,並添加以下代碼:

$gdprecords2 = $gdprecords->sortByDesc('bi_adult')->all(); 
    $perPage = 25; 
    $sorted_gdprecords = self::paginate($gdprecords2, $perPage); 

感謝您的幫助。 -Philip

相關問題