1.需求
当你限制了2条查询数据以id倒叙想要将这2条进行分页,一页1条。
一般情况是这样写的:
$admin = Admin::orderBy('id','desc')->limit(2)->paginate(1);
数据表
id | name | password |
---|---|---|
1 | camille1 | $10$K3gVlp9cl8Bw4rujYb…HugkydofbVUqZsa1lfVfWkJsmrSI3Cw.W |
2 | camille2 | $10$K3gVlp9cl8Bw4rujYb…HugkydofbVUqZsa1lfVfWkJsmrSI3Cw.W |
3 | camille3 | $10$K3gVlp9cl8Bw4rujYb…HugkydofbVUqZsa1lfVfWkJsmrSI3Cw.W |
4 | camille4 | $10$K3gVlp9cl8Bw4rujYb…HugkydofbVUqZsa1lfVfWkJsmrSI3Cw.W |
最后输出
可以看到虽然分页是一条数据,但是4条全部输出并没有限制2条所以限制条数失败了,想要实现只要2条数据并且一页显示一条可以使用下面代码
2.实现
- a.以数组格式限制条数分页
//数组限制条数分页
public function index(Request $request)
{
//共有4个用户限制两条数据输出分页为1个用户一页
$admin = Admin::orderBy('id', 'desc')->limit(2)->get()->toArray();
//当前页数 默认1
$page = $request->page ?: 1;
//每页的条数
$perPage = 1;
//计算每页分页的初始位置
$offset = ($page * $perPage) - $perPage;
//实例化LengthAwarePaginator类,并传入对应的参数
// $data = new LengthAwarePaginator($admin->slice($offset, $perPage), count($admin), $perPage, $page, ['path' => $request->url(), 'query' => $request->query()]);
$data = new LengthAwarePaginator(array_slice($admin, $offset, $perPage, true), count($admin), $perPage,$page, ['path' => $request->url(), 'query' => $request->query()]);
return $data;
}
- b.以对象格式限制条数分页
//对象限制条数分页
public function index(Request $request)
{
//共有4个用户限制两条数据输出分页为1个用户一页
$admin = Admin::orderBy('id', 'desc')->limit(2)->get();
//当前页数 默认1
$page = $request->page ?: 1;
//每页的条数
$perPage = 1;
//计算每页分页的初始位置
$offset = ($page * $perPage) - $perPage;
//实例化LengthAwarePaginator类,并传入对应的参数
$data = new LengthAwarePaginator($admin->slice($offset, $perPage), count($admin), $perPage, $page, ['path' => $request->url(), 'query' => $request->query()]);
// $data = new LengthAwarePaginator(array_slice($admin, $offset, $perPage, true), count($admin), $perPage,$page, ['path' => $request->url(), 'query' => $request->query()]);
return $data;
}
3.解惑
其实以上两种格式的实现只是用了slice()替换了array_slice(),array_slice()数组结果集中指定从第几个元素开始,显示几个元素,slice()就是对象结果集中指定从第几个元素开始,显示几个元素。详情参考文档