如何使用 Laravel Pagination 与模型关系?

Dr.*_*MAF 2 php laravel laravel-4 laravel-5

我有类别和项目表。每个项目只属于一个类别,每个类别又包含多个项目。因此,在 Category 模型中,我定义了这种关系:

public function items()
{ return $this->hasMany('Item', 'catid'); }
Run Code Online (Sandbox Code Playgroud)

我以这种方式检索类别的数据:

$category = Category::find($id);
return View::make('admin.categories.catdetails')->with('category', $category);
Run Code Online (Sandbox Code Playgroud)

在我看来,我可以遍历数据:

 @foreach ($category->items as $item)
        <tr>          
            <td> {{ $item->name }}  </td> 
            <td> {{number_format($item->price, 2, '.', '')}} </td>
        </tr>
    @endforeach
Run Code Online (Sandbox Code Playgroud)

但这会导致页面上的所有项目。如果一页有这么多项目,如何使用 Laravel 分页?我该如何使用

::paginate() // in controller or model
->links() // in view
Run Code Online (Sandbox Code Playgroud)

到目前为止,它引发了很多错误,我无法弄清楚。提前致谢。

luk*_*ter 6

您可以调用paginate()关系对象,您可以通过->items()(not ->items)访问该对象

$items = $category->items()->paginate(10);

return View::make('admin.categories.catdetails')
    ->with('category', $category)
    ->with('items', $items);
Run Code Online (Sandbox Code Playgroud)

那么在你看来:

@foreach ($items as $item)
Run Code Online (Sandbox Code Playgroud)

和:

$items->links()
Run Code Online (Sandbox Code Playgroud)

您可以使用属性访问器来实现您想要的。在您的模型中:

public function getPaginatedItemsAttribute(){
    return $this->items()->paginate(10);
}
Run Code Online (Sandbox Code Playgroud)

然后你像这样使用它:

@foreach ($category->paginatedItems as $item)
Run Code Online (Sandbox Code Playgroud)

和:

$category->paginatedItems->links()
Run Code Online (Sandbox Code Playgroud)