本篇文章简单介绍利用laravel的Eloquent接收参数进行分页。文章基于laravel5.3的Eloquent,在slim3框架上应用和实践。
Eloquent如何进行分页?
Eloquent如何进行分页的办法在官方文档中有详细的解析,http://laravelacademy.org/post/6160.html 大家也可以参考这篇文章。主要是利用两个方法:其一使用simplePaginate
可以进行简单的分页,我们可以获得前一页和后一页的链接。其二是使用paginate
方法进行分页,这种方法可以传递参数进行分页,并且返回json格式的数据,本篇文章将详细介绍paginate
的方法。
paginate如何运作
假设我们对用户列表进行分页。
Users::paginate();
paginate当中可以接收一个参数,这个参数决定每一页显示多少条目数据,比如paginate(5);
就是每五条数据一页。
如果返回json数据看起来是下图的样子。
{
"total": 2,
"per_page": "1",
"current_page": 1,
"last_page": 2,
"next_page_url": "http://localhost/learn_slim/v1/users/page/1/2",
"prev_page_url": "",
"from": 1,
"to": 1,
"data": [
{
"ID": 1,
"user_login": "admin",
"user_pass": "123123",
}
]
}
total:表示数据的总数
per_page:表示每一页显示的数据条目
current_page:表示当前页面的页码
last_page:表示最后一页的页码
next_page_url:表示下一页的链接
prev_page_url:表示上一页的链接
from:获取切片中第一个条目
to:获取切片中最后一个条目
通过传值方法进行分页查询
上面的让paginate()
只接收一个参数的办法虽然可以进行简单的分页,但是无法返回指定页面。paginate()
还可以接收其他参数。
paginate($perPage = null, $columns = ['*'], $pageName = '', $page = null)
上面的参数解释
perPage:表示每页显示的条目数量
columns:接收数组,可以向数组里传输字段,可以添加多个字段用来查询显示每一个条目的结果
pageName:表示在返回链接的时候的参数的前缀名称,在使用控制器模式接收参数的时候会用到
page:表示查询第几页及查询页码
其他详细内容可以去查看paginate类里面的内容
关于返回链接的问题
实际上返回链接是?=page
的形式,但是我们在编写restful api的时候不会去接收这种形式的参数,而是使用pretty url。这时我们可以修改paginate()输出的数组内容。
我们可以利用toArray()
获得paginate的数组。paginate()->toArray()
。
然后利用 str_replace()
替换掉?=,再重新赋值到数组当中就可以了。