Laravel —— 特殊分页
项目中,分页经常会用到。
Laravel 中也自带了分页功能。
但有些时候需要稍作修改,来满足自己的需求。
一、普通分页
1、控制器中,用 paginate() 方法。
$users = DB::table('users')->paginate(15);
或简单分页
$users = DB::table('users')->simplePaginate(15);
2、blade 模板中,可直接用查询结果数据
{{ $users->links() }}、{{ $users->render() }}
分页自带了 bootstamp 样式
3、自定义分页 URI
$users->withPath('custom/url');
4、附加参数到分页
$users->appends(['sort' => 'votes'])->links()
二、自定义分页
1、自定义分页模板
php artisan vendor:publish --tag=laravel-pagination
会在 resources/views 目录下自动创建 pagination/ 目录
会把自带分页中的模板 copy 在以上目录中。
2、修改模板
比如修改显示链接数,分页内容等。
3、调用自定义模板
$paginator->links('view.name')
links 参数为模板路径
三、集合中的分页
很多时候查询结果需要用 Collection 处理后再分页,而 Laravel 中是不支持的。
下面稍作修改,来实现上面的需求
1、集合处理查询结果
$users = DB::table('users')
->get()
->each(function($item, $key){
$item->total = 11;
})->paginate(15);
经过上面的处理后,会发现分页消失了。
2、分页加入服务提供者中
在 app/Providers/AppServiceProvider.php 文件,
头部引入下面类
use Illuminate\Pagination\Paginator; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection;
boot 方法中添加以下代码
if (!Collection::hasMacro('paginate')) { Collection::macro('paginate', function ($perPage = 15, $page = null, $options = []) { $page = $page ?: (Paginator::resolveCurrentPage() ?: 1); return (new LengthAwarePaginator( $this->forPage($page, $perPage), $this->count(), $perPage, $page, $options)) ->withPath(''); }); }
再去测试,发现分页又回来了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异