Laravel博客某分类分页始终显示第一页问题求助
问题分析与解决方案
你的orientation分类分页异常,核心是代码里的重复查询+数据与分页实例脱节导致的:
- 你分别用
get()->take(6)和paginate(6)做了两次独立查询,$articles永远只取前6条数据,完全不响应分页的page参数; - 虽然
$links是正确的分页实例,但它和展示的$articles没有关联,导致分页控件无法正确识别当前页码,始终显示第一页。
修复步骤
1. 简化控制器代码,复用分页实例
直接用paginate()返回的对象同时处理数据展示和分页链接,不需要分开查询:
$page = Categoriepage::where('identifiant', 'orientation')->first(); $idArticle = Articleliaison::where('idPage', $page->id)->pluck('idArticle'); // 直接生成分页实例,自动处理page参数 $articles = Article::whereIn('id', $idArticle) ->where('status', 'enable') ->orderBy('created_at', 'desc') ->paginate(6); return View::make('pages.orientation')->with('articles', $articles);
2. 更新视图代码,绑定分页实例
把分页链接的调用改成从$articles实例获取,确保数据和分页状态一致:
<?php $i = 1 ?> <div class="masonry "> @foreach($articles as $article) @include('components.article-or') <?php $i++ ?> @endforeach </div> <div class="text-center" style="margin-top: 5%"> {{ $articles->links() }} </div>
额外优化:避免重复查询与N+1问题
如果你的模型已经定义了关联关系(比如Categoriepage关联Articleliaison,Articleliaison关联Article),可以用关联查询简化代码并提升性能:
// 预加载关联数据,避免多次查询 $page = Categoriepage::with(['articleliaisons.article' => function ($query) { $query->where('status', 'enable')->orderBy('created_at', 'desc'); }])->where('identifiant', 'orientation')->first(); // 对关联的文章进行分页 $articles = $page->articleliaisons->pluck('article')->paginate(6);
这样修改后,分页控件会正确识别当前页码,点击后也会加载对应页的文章数据,解决你遇到的问题。
内容的提问来源于stack exchange,提问作者Youssef Boudaya
相关产品推荐
相关产品推荐

