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