什么是分页
Laravel 的分页与查询构造器和 Eloquent ORM 无缝集成,开箱即用。当前页会自动从 HTTP 请求的page 查询参数读取,并自动附加到生成的链接中。
默认的 HTML 支持 Tailwind CSS,也可以选择 Bootstrap CSS。
三种分页方式
基本用法
查询构造器分页
Eloquent 分页
simplePaginate
如果不需要COUNT(*)(只显示上一页/下一页),使用 simplePaginate() 更高效。
cursorPaginate(游标分页)
游标分页使用 WHERE 子句代替 OFFSET,在大量数据下性能更好,尤其适合无限滚动的 UI。OFFSET 与游标的对比
控制器中的用法
在 Blade 中显示分页链接
links() 方法会自动生成分页链接 HTML。默认会显示当前页前后各 3 页的链接。
调整两侧显示的链接数
onEachSide() 用来指定当前页两侧显示的链接数量。
从请求获取每页条数
同页展示多个分页器
若同一页面上有两个分页器,两个都用page 参数会互相冲突。可以通过第三个参数改名。
URL 自定义
修改基础 URL
追加查询参数
添加 hash 片段
API 响应(JSON 输出)
从路由或控制器直接返回分页器时,会自动转换为 JSON。与 API 资源组合
要用 API 资源集合包装paginate() 的结果,可以传给 UserResource::collection()。
UserResource::collection() 后,分页信息会作为元数据自动附加。
cursorPaginate() 的 JSON 中不会有页码,而是 next_cursor 和 prev_cursor。API 客户端应使用它们作为下一次请求的 cursor 参数。自定义分页视图
视图文件直接指定
修改默认视图为自定义文件
先发布官方视图再进行定制。resources/views/vendor/pagination/ 下会生成以下文件:
tailwind.blade.php— 默认(Tailwind CSS)bootstrap-5.blade.php— Bootstrap 5simple-tailwind.blade.php— simplePaginate 用- …
tailwind.blade.php,也可以新建视图并在 AppServiceProvider 中指定。
使用 Bootstrap CSS
若使用 Bootstrap 而非 Tailwind,可以在AppServiceProvider 的 boot() 中指定。
手动创建分页器
对数组等现有数据做分页时,可以直接实例化分页器类。常用实例方法
小结
如何选择分页方式
如何选择分页方式
paginate()— 需要总条数和页码链接(常见列表页)simplePaginate()— 只需要上一页/下一页链接(更快)cursorPaginate()— 大数据量、无限滚动、高频写入(性能最好)
Blade 展示基本模式
Blade 展示基本模式
paginate() 的结果传给视图,用 links() 输出分页链接即可。
当前页会自动从 page 查询参数读取。API 中的分页
API 中的分页
从路由直接返回分页器会自动转 JSON。
与 API 资源结合时,返回
UserResource::collection($paginator)。
响应中包含 data(记录数组)以及各种元信息。