Laravel限制条数再分页

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()就是对象结果集中指定从第几个元素开始,显示几个元素。详情参考文档

区别所在

发布了17 篇原创文章 · 获赞 25 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41800559/article/details/88737437