Laravel8按分类展示文章 路由正常但文章不显示问题排查
Laravel 分类下文章不展示问题修复
存在的问题
- 核心错误:文章查询未触发SQL执行。当前控制器中
$posts赋值的是Eloquent查询构造器对象,没有调用get()/paginate()等执行方法拉取实际数据,传给视图的是查询构建器实例而非文章集合,无法遍历输出文章。 - 潜在关联风险:Post模型的
belongsTo关联未显式指定外键字段,框架默认会用关联方法名加_id拼接外键名(即category_id,和你hasMany侧定义的外键一致的话暂时不会出错,但如果后续改字段名、模型名很容易出现关联失效,建议显式声明绑定字段)。
修正后代码
Post模型关联定义
public function category() { // 显式绑定外键、关联表主键,避免框架自动猜字段出错 return $this->belongsTo(CategoriesPost::class, 'category_id', 'id'); }
CategoriesPost模型关联定义
public function posts() { // 补全主键绑定,逻辑更严谨 return $this->hasMany(Post::class, 'category_id', 'id'); }
控制器查询逻辑
// 文章查询末尾加get()触发SQL执行,需要分页可替换为->paginate(10) $posts = Post::where('article_status', 'published') ->whereHas('category', function ($query) use ($slug) { $query->where('category_slug', $slug); }) ->get(); $category = CategoriesPost::where('category_slug', $slug)->first(); return view('pages.article', compact('posts', 'category'));
补充排查点
如果修正后仍无法展示,可逐一核对:
- 路由传入的
$slug参数和categories_post表中存储的category_slug值完全一致,注意大小写、首尾空格问题 - 对应分类ID下确实存在
article_status值为published的已发布文章 - 视图文件中遍历文章的语法正确,例如用
@foreach($posts as $post)循环输出内容
内容的提问来源于stack exchange,提问作者Firqy 17
相关产品推荐
相关产品推荐

