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

Laravel获取文章全部分类:关联查询仅返回单个分类的解决方法

解决多对多关联获取所有分类的问题

首先,你遇到的问题根源是用错了关联类型:belongsTo 是用于一对多/一对一的从属关联(比如一篇文章属于一个作者),它只会返回单个关联模型;而你的场景是文章和分类的多对多关联,需要用 belongsToMany 来定义关联,这样才能获取到某篇文章的所有分类。

步骤1:修正Post模型的关联方法

假设你的分类模型是 Category(如果不是,替换成你实际的分类模型类名),修改 categories 方法如下:

public function categories()
{
    return $this->belongsToMany(
        Category::class,          // 关联的分类模型
        'post__post_category_relations', // 中间表名称
        'post_id',                // 中间表中关联当前模型的字段
        'category_id'             // 中间表中关联分类模型的字段
    );
}

补充:多对多关联通常不需要单独的中间表模型,直接关联到分类模型即可,不需要用 PostCategoryRelations 类。

步骤2:修复表结构的拼写错误

另外注意你的表结构代码里有个拼写错误:unsinged() 应该是 unsigned(),这个小错误可能会导致字段创建失败,修正后的表结构代码:

Schema::create('post__post_category_relations', function (Blueprint $table) {
    $table->engine = 'InnoDB';
    $table->increments('id');
    $table->integer('post_id')->unsigned();
    $table->integer('category_id')->unsigned();
    $table->timestamps();
});

步骤3:在Blade模板中展示所有分类

现在你可以在文章编辑页的Blade模板中,通过关联获取并循环展示所有分类了,示例代码:

{{-- 假设你已经获取了当前文章实例 $post --}}
<div class="post-categories">
    <h3>文章分类:</h3>
    @foreach($post->categories as $category)
        <span class="category-tag">{{ $category->name }}</span>
    @endforeach
</div>

这样就能正确展示该文章关联的所有分类啦!

内容的提问来源于stack exchange,提问作者justcntt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:15:30