🗣 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地址: 27.99.163.6
搜索次数: 121
提问时间: 2025-11-08 14:03:16
本站所有
❓
问答
均由Ai自动分析整理,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
本站由
🟢
豌豆Ai
提供技术支持,使用的最新版:
豌豆Ai站群搜索引擎系统 V.25.10.25
搭建本站。