我试图对数组数据进行分页,事实证明它比我想象的更具挑战性。
我正在使用Laravel 5
所以我有一个抽象的接口/存储库,我的所有其他模型都扩展到了,我在抽象存储库调用paginate中创建了一个方法。 我已经包括了两个
use Illuminate\Pagination\Paginator;
和
use Illuminate\Pagination\LengthAwarePaginator;
以下是方法
public function paginate($items,$perPage,$pageStart=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()));
}
因此,您可以想象此函数接受一个$items
$perPage
变量数组,该变量指示要分页的项目数以及指示从哪个页面开始的$pageStart
。 / p>
分页工作正常,当我正在执行LengthAwarePaginator
时,我可以看到dd()
实例,所有这些值似乎都很好。
当我显示结果时,问题就开始了。
当我{!! $instances->render() !!}
分页器链接显示正常时,page
参数会根据链接发生变化,但数据不会发生变化。
每页的数据都相同。当我使用Eloquent作为示例Model::paginate(3)
时,一切正常,但当我dd()
这个LengthAwarePaginator
它与我自定义的LengthAwarePaginator
实例相同时paginator,除了它为一个数组而不是一个集合分页。
答案 0 :(得分:12)
您没有传递当前页面,就像您应该这样,您也可以获得相同的数组。这将有效
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()));
}
如果您为$pageStart
- Request::get('page', 1)