Laravel限制条数再分页(使用LengthAwarePaginator/Paginator手动分页)

项目上比较常用,经常需要你限制返回的总数,比方说让你只显示最新的48条数据并进行分页,此时使用limit(48)再用paginate方法分页的话,limit方法会失效,例如

$video_list = UserVideo::orderByDesc('video_upload_time')->limit(48)->paginate(16);

下面尝试使用官方文档的手动分页方法:LengthAwarePaginator/Paginator
文档原文:

手动创建分页
有时你可能希望手动创建分页,并传递一个数组集给它。可以通过创建 Illuminate\Pagination\Paginator 或 Illuminate\Pagination\LengthAwarePaginator 实例来实现,这有赖于你的需要。.
Paginator 类不需要知道结果集的总数;但是,这样一来,这个类就没办法获知最后一页的索引。 LengthAwarePaginator 接受和 Paginator 几乎相同的参数;不过,它会计算结果集的总数。
换句话说, Paginator 相当于 查询构造器 或 Eloquent 的 simplePaginate 方法,而 LengthAwarePaginator 相当于 paginate 方法。

以下方法可以作为参考

1、使用LengthAwarePaginator 手动分页

直接贴出代码分析

  /**
  *  限制条数再分页
  */
    public function videoList(Request $request)
    {
        //限制每个用户输出48条视频数据,输出分页为16条一页
       $video_list = UserVideo::orderByDesc('video_upload_time')
            ->where('user_id', $request['user_id'])->limit(48)->get()->toArray();
        //当前页数 默认1
        $page = $request->page?:1;
        //每页的条数
        $perPage = 16;
        //计算每页分页的初始位置
        $offset = ($page * $perPage) - $perPage;
        //实例化LengthAwarePaginator类,并传入对应的参数
        $data = new LengthAwarePaginator(array_slice($video_list, $offset, $perPage, true), count($video_list), $perPage, $page, ['path' => $request->url(), 'query' => $request->query()]);
        return $data;
    }

image.png

2、使用Paginator 手动分页

  /**
  *  限制条数再分页
  */
    public function videoList(Request $request)
    {
        //限制每个用户输出48条视频数据,输出分页为16条一页
        $video_list = UserVideo::orderByDesc('video_upload_time')
            ->where('user_id', $request['user_id'])->limit(48)->get()->toArray();
        //当前页数 默认1
        $page = $request->page?:1;
        //每页的条数
        $perPage = 16;
        //计算每页分页的初始位置
        $offset = ($page * $perPage) - $perPage;
        //实例化Paginator类,(删掉上一步的count($video_list)参数即可 )并传入对应的参数
       $data = new Paginator(array_slice($video, $offset, $perPage, true), $perPage, $page, ['path' => $request->url(), 'query' => $request->query()]);
        return $data;
    }

image.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 分页 简介 在其他框架中,分页通常是比较痛苦的。laravel 使其变的非常简单。laravel 可以根据当前页面...
    Dearmadman阅读 13,238评论 0 10
  • 分页 REST framework 包含对可定制分页样式的支持。这使你可以将较大的结果集分成单独的数据页面。分页 ...
    入间阅读 5,118评论 0 2
  • Django提供了一些类来帮助您管理分页数据 - 即分布在多个页面上的数据,带有“上一页/下一页”链接。 REST...
    YYL07阅读 9,776评论 0 2
  • 一直处于忙忙碌碌的状态,业绩却没有太大的成效。我感受下内心那个我,她是不坦然的,甚至有点气馁的,因为做了很多努力不...
    陈艳华_ff6e阅读 1,364评论 0 0
  • 1.为什么需要泛型 为了解决这个问题,让问题提前到编译期就能发现,Java推出的了泛型。泛型最常使用的在各种容器中...
    AyoM麦兜阅读 1,864评论 0 0

友情链接更多精彩内容