Laravel自定义查询实现分页后如何在前端页面渲染使用
Laravel博客列表分页数据前端渲染方案
控制器层优化(推荐)
你当前手动计算偏移量的实现可以直接替换为Laravel内置的分页方法,无需手动处理page参数、计算offset,系统会自动完成这些逻辑,同时自动携带分页所需的所有元数据:
// 博客列表页方法 public function blogs(Request $request) { // 每页展示10条,自动筛选状态为1的已发布博客,自动读取请求page参数计算偏移 $blogs = Blog::where('status', 1)->paginate(10); // 传数据到前端视图,compact写法和之前数组传参效果一致 return view('frontend.blog', compact('blogs')); }
如果坚持使用原有手动offset+limit的查询逻辑,需要额外查询数据总条数、计算总页数、手动处理分页参数合法性校验,实现成本更高,无特殊需求不建议使用。
前端Blade模板渲染列表
控制器传递到视图的$blogs变量可以直接在resources/views/frontend/blog.blade.php模板中遍历渲染,支持直接调用模型字段、做空状态判断:
<div class="blog-container"> <!-- 博客列表遍历 --> <div class="blog-list"> @foreach($blogs as $blog) <div class="blog-card"> <h2 class="blog-title">{{ $blog->title }}</h2> <div class="blog-info"> <span>发布时间:{{ $blog->created_at->format('Y-m-d') }}</span> <span>浏览量:{{ $blog->view_count }}</span> </div> <div class="blog-summary">{{ $blog->summary }}</div> <a href="{{ route('blog.detail', ['id' => $blog->id]) }}" class="detail-link">查看详情</a> </div> @endforeach </div> <!-- 空数据提示 --> @if($blogs->isEmpty()) <div class="no-data">当前暂无已发布的博客内容</div> @endif </div>
分页导航渲染
使用内置paginate()方法查询的数据,不需要手动编写分页HTML,直接调用分页方法即可自动生成带页码跳转的导航,默认适配Bootstrap样式:
<div class="pagination-wrapper"> {{ $blogs->links() }} </div>
如果使用手动实现的分页逻辑,需要自行将总页数、当前页码等参数传到前端,拼接page参数生成分页链接,同时要注意:
- 校验page参数合法性:page小于1时默认取1,page大于总页数时返回最后一页数据
- 分页跳转链接需要保留当前请求携带的其他筛选参数(如分类id、搜索关键词等)
内容的提问来源于stack exchange,提问作者Ravi Kumar
相关产品推荐
相关产品推荐

