Laravel分页不使用数组而不是集合

时间:2015-05-27 09:08:32

标签: laravel laravel-5 laravel-pagination

我试图对数组数据进行分页,事实证明它比我想象的更具挑战性。

我正在使用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,除了它为一个数组而不是一个集合分页。

1 个答案:

答案 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)

传递正确的值,您的功能也会有效