2013-03-05 114 views
3

我不能創建一個使用laravel 4.適當的分頁系統,我有以下的模型和函數返回集合:laravel 4 PAGINATE收集

型號餐廳:

public function fooditem() 
{ 
    return $this->hasMany('Fooditem','rest_id'); 
} 
public function get_rest_foods($id){ 
    return Restaurant::find($id)->fooditem->toArray(); 
} 

第二個函數返回所有食品作爲一個陣列的某個餐館。我也在API調用中使用它。

在我的控制器

我有這樣的:

$food = $food->get_rest_foods($id); 
$paginator = Paginator::make($food, 10, 5); 

我通過分頁程序的視圖,它顯示的鏈接確定,但也顯示出從食品陣列我所有的項目。

我嘗試使用

public function get_rest_foods($id){ 
     return Restaurant::find($id)->fooditem->paginate(5); 
    } 

,但我得到一個錯誤:

FatalErrorException: Error: Call to undefined method Illuminate\Database\Eloquent\Collection::paginate()

我搜索這個和許多其他網站,但不能understant如何分頁的集合。

感謝您的幫助

回答

3

的Laravel分頁程序不爲你做任何拼接的。通常,分頁程序應與Eloquent/Fluent一起使用。在你的第二個例子中,你應該這樣做。

return Restaurant::find($id)->fooditem()->paginate(5); 

沒有打電話給你只會越來越結果的集合,而不是查詢生成器實例的實際方法。

如果您想手動使用分頁程序,則需要傳入拼接數組(當前頁面的正確項目)。這通常涉及確定當前頁面,總結果和總頁數。這就是爲什麼在可能的情況下,最好將它與Eloquent或Fluent結合使用。

4

我創建的集合的子類,實現我自己的PAGINATE方法

public function paginate($perPage) { 
    $pagination = App::make('paginator'); 
    $count = $this->count(); 
    $page = $pagination->getCurrentPage($count); 
    $items = $this->slice(($page - 1) * $perPage, $perPage)->all(); 
    $pagination = $pagination->make($items, $count, $perPage); 
    return $pagination; 
} 
+0

這隻適用於如果加載完整的應用程序堆棧。如果你正在使用L4組件,那麼在L4.2中輸入 – 2014-03-20 19:45:36

5

的分頁程序必須得到它通常會從偏移/限制語句的數據庫查詢得到的物品。 所以,當你有一個所有項目的集合,你應該自己做偏移/限制。

$food = $food->get_rest_foods($id); 

    $page = 1; 
    if(!empty(Input::get['page'])) { 
     $page = Input::get['page']; 
    } 

    $perPage = 15; 
    $offset = (($page - 1) * $perPage); 

    $food = Paginator::make($food->slice($offset,$perPage, true)->all(), $food->count(), $perPage); 
+0

Input :: get('page') – mridul 2014-11-28 08:25:01

+0

非常感謝!允許我創建自定義分頁項目,並將其插入到集合中。 – 2015-03-19 20:14:35