🗣 Wd提问: php分页laravel
🤖 Ai回答: 在 Laravel 中,PHP 分页是一个非常常见且强大的功能。Laravel 提供了内置的分页支持,可以轻松地对数据库查询结果进行分页处理。以下是使用 Laravel 实现分页的详细说明。
✅ 1、基本分页(使用 Eloquent 模型)
假设你有一个 `Post` 模型,你想对文章进行分页显示。
示例:获取每页 10 条数据
php
// 在控制器中
public function index()
{
$posts = Post::paginate(10); // 每页 10 条记录
return view('posts.index', compact('posts'));
}
在 Blade 模板中渲染分页链接
blade
{{ posts/index.blade.php }}
<table
@foreach($posts as $post)
<tr
<td{{ $post-title }}</td
<td{{ $post-content }}</td
</tr
@endforeach
</table
{{ $posts-links() }} {{ 渲染分页链接 }}
`{{ $posts-links() }}` 会自动渲染默认的 Bootstrap 风格的分页按钮。
✅ 2、自定义每页数量
你可以通过 URL 参数或表单传入每页数量:
php
public function index(Request $request)
{
$perPage = $request-input('per_page', 10); // 默认每页 10 条
$posts = Post::paginate($perPage);
return view('posts.index', compact('posts'));
}
然后在页面上添加一个下拉菜单选择每页数量:
blade
<form method=GET
<select name=per_page onchange=this.form.submit()
<option value=5 {{ request('per_page') == '5' ? 'selected' : '' }}5</option
<option value=10 {{ request('per_page') == '10' ? 'selected' : '' }}10</option
<option value=20 {{ request('per_page') == '20' ? 'selected' : '' }}20</option
</select
</form
✅ 3、简单分页(SimplePaginate)
如果你只需要“上一页”和“下一页”,不需要显示所有页码,可以用 `simplePaginate()`:
php
$posts = Post::simplePaginate(10);
它比 `paginate()` 更轻量,只返回当前页、前一页、后一页的信息。
✅ 4、手动设置分页参数(如页码、路径等)
php
$posts = Post::paginate(10, ['*'], 'page', $request-input('page', 1));
或者指定自定义分页路径:
php
$posts = Post::paginate(10)-appends(['category' = $category]);
这会在分页链接中保留其他查询参数,例如:
/posts?page=2&category=laravel
✅ 5、分页数据信息
你可以访问分页对象的属性来获取更多信息:
blade
<p当前页: {{ $posts-currentPage() }}</p
<p总页数: {{ $posts-lastPage() }}</p
<p总记录数: {{ $posts-total() }}</p
<p每页数量: {{ $posts-perPage() }}</p
<p当前页数据: {{ $posts-count() }}</p
✅ 6、自定义分页视图
Laravel 支持自定义分页视图。例如,创建一个自定义的分页样式:
blade
{{ resources/views/vendor/pagination/bootstrap-4.blade.php }}
<nav
<ul class=pagination
@if ($paginator-onFirstPage())
<li class=page-item disabled
<span class=page-link«</span
</li
@else
<li class=page-item
<a class=page-link href={{ $paginator-previousPageUrl() }}«</a
</li
@endif
@foreach ($paginator-getUrlRange(1, $paginator-lastPage()) as $page = $url)
<li class=page-item {{ $page == $paginator-currentPage() ? 'active' : '' }}
<a class=page-link href={{ $url }}{{ $page }}</a
</li
@endforeach
@if ($paginator-hasMorePages())
<li class=page-item
<a class=page-link href={{ $paginator-nextPageUrl() }}»</a
</li
@else
<li class=page-item disabled
<span class=page-link»</span
</li
@endif
</ul
</nav
也可以使用 `vendor:publish` 发布分页视图:
bash
php artisan vendor:publish tag=laravel-pagination
✅ 7、使用 API 分页(JSON 返回)
如果是在 API 中使用,可以返回 JSON 格式的分页数据:
php
return response()-json([
'data' = $posts,
'meta' = [
'current_page' = $posts-currentPage(),
'from' = $posts-firstItem(),
'to' = $posts-lastItem(),
'per_page' = $posts-perPage(),
'total' = $posts-total(),
'last_page' = $posts-lastPage(),
'path' = $posts-path(),
]
]);
或者直接返回:
php
return $posts;
Laravel 会自动将分页对象转换为 JSON。
✅ 总结
| 方法 | 用途 |
| `paginate()` | 完整分页,包含所有页码 |
| `simplePaginate()` | 只有前后页,性能更好 |
| `appends()` | 添加额外参数到分页链接 |
| `links()` | 渲染分页链接 |
| `currentPage()` / `lastPage()` 等 | 获取分页信息 |
📚 参考文档
[Laravel Pagination Docs](https://laravel.com/docs/pagination)
如果你有具体需求,比如:
自定义分页样式
AJAX 分页
多条件搜索 + 分页
分页数据导出
欢迎继续提问!
📣 商家广告:





0
IP地址: 226.160.124.140
搜索次数: 0
提问时间: 2025-11-08 10:21:26
🛒 域名购买:
87.gold
che.red
8.he.cn
chesou.com.cn
kkky.com.cn
327.net.cn
6.ac.cn
dk.gs
e-j.com.cn
75.gold
❓️ 热门提问:
机房接地线铜排
懒人挂机电脑版
给我打开服务器
托管服务器是什么意思
江西电信服务器托管
注册域名和企业邮箱
.xyz是哪个国家的域名
搭建nginx服务器
云服务器安装windows10
vps购买
豌豆Ai站群搜索引擎系统
🌐 域名评估:
saweb.cn
su.hb.cn
su7.hi.cn
oppo.sn.cn
musk.fashion
w.hb.cn
juzxe.cn
vivo.hk.cn
42.gs
qbdg.cn
⛏ 最新挖掘:
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜
🖌 热门作画:
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊:
🔗 友情链接:
サーチエンジンプログラム
臺灣搜尋引擎入口
ai提问
🧰 站长工具:
Ai工具 whois查询 搜索
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。