2013-03-05 117 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