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
相关产品推荐
相关产品推荐

