美文网首页Laravel开发实践PHP经验分享Laravel
Laravel限制条数再分页(使用LengthAwarePagi

Laravel限制条数再分页(使用LengthAwarePagi

作者: 众神开挂 | 来源:发表于2020-03-12 09:15 被阅读0次

    项目上比较常用,经常需要你限制返回的总数,比方说让你只显示最新的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

    相关文章

      网友评论

        本文标题:Laravel限制条数再分页(使用LengthAwarePagi

        本文链接:https://www.haomeiwen.com/subject/qktkjhtx.html