5

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

我正在使用 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指示从哪个页面开始的变量。

LengthAwarePaginator分页有效,当我做 a 时我可以看到实例dd(),它的所有值看起来都很好。

当我显示结果时,问题就开始了。

当我做{!! $instances->render() !!}分页器链接显示很好时,page参数会根据链接发生变化,但数据没有变化。每一页的数据都是一样的。例如,当我使用 Eloquent 时,Model::paginate(3)一切正常,但是当我dd()这样做时LengthAwarePaginator,它与我的自定义分页器的实例相同,LengthAwarePaginator只是它对数组进行分页,而不是对集合进行分页。

4

1 回答 1

16

你没有像你应该的那样传递当前页面,所以你也得到了相同的数组。这将起作用

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)

于 2015-05-27T10:01:32.590 回答