Laravel 手动对 Collection 进行分页

最近遇到一些需求。需要在分页输出前对数据进行一些调整,然后再输出分页,找到一个手动对 Collection 分页的方案,下面是示例代码:

// 获取所有用户
$users = User::all();
// 为每个用户添加一个属性
$users->each(function($user) {
  $user->foo = 'bar';
});
// 对数据进行手动分页
$per_page = 5; // 每页显示5条
$users = $this->paginateCollection($users, $per_page);
return View('users', compact('users'));

下面是分页方法:

protected function paginateCollection($collection, $perPage, $pageName = 'page', $fragment = null)
    {
        $currentPage = \Illuminate\Pagination\LengthAwarePaginator::resolveCurrentPage($pageName);
        $currentPageItems = $collection->slice(($currentPage - 1) * $perPage, $perPage)->values();
        parse_str(request()->getQueryString(), $query);
        unset($query[$pageName]);
        $paginator = new \Illuminate\Pagination\LengthAwarePaginator(
            $currentPageItems,
            $collection->count(),
            $perPage,
            $currentPage,
            [
                'pageName' => $pageName,
                'path' => \Illuminate\Pagination\LengthAwarePaginator::resolveCurrentPath(),
                'query' => $query,
                'fragment' => $fragment
            ]
        );

        return $paginator;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,751评论 25 709
  • 今天上午在董老师的带领下,我们学习了,switch,while,do while语句,这些语句间接的取代了for....
    张瑜zy阅读 65评论 1 0
  • ListPopupWindow默认是有一个阴影效果的,如果需要去除。可以看到ListPopupWindow本身的构...
    Avalon1阅读 3,786评论 0 0
  • 秋季已过了大半,孩子们开学也有一个半月。今日带孩子在院子里开会,一个孩子看着眼前的桂花树,感叹道:桂花都开了。 是...
    任亚阅读 314评论 0 0