Laravel开发实践PHP经验分享Laravel

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

2020-03-12  本文已影响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
上一篇 下一篇

猜你喜欢

热点阅读