You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:01:00