首页 文章

Laravel的帖子和标签:有很多关系吗?

提问于
浏览
1

我正在制作一个Laravel应用程序 .

我有一个存储“博客帖子”的帖子表 . 我还有一个用于存储标签的标签表(例如:用于烹饪帖子的“烹饪”,用于书籍帖子的“书籍”) . 每个帖子都可以有很多标签 . 我这样设置我的数据库

帖子

  • id

  • 文字

  • Headers

标签

  • id

  • 名字

PostTags

  • id

  • tag_id

  • post_id

这是Laravel / Eloquent中的“HasManyThrough”关系吗?我尝试使用设置我的模型

public function tags()
{
   return $this->hasManyThrough('App\Tag', 'App\PostTag')
}

但是,这不起作用 - 抛出异常告诉我列名不存在 .

2 回答

  • 1

    这实际上是一个“belongsToMany”关系 - 我遗漏的事实是你可以在声明关系时使用参数指定一个数据透视表:

    public function tags()
    {
       return $this->belongsToMany('App\Tag', 'post_tags')
    }
    
  • 0

    这不是一种多任务的关系 .

    帖子可以属于许多标签(例如:帖子“Foobar”可以属于“foo”和“bar”标签) . 标签可以属于许多帖子(例如:标签“foo”可以属于帖子“Foobar”和“Another post”) .

    所以,在Post课程中你会有

    public function tags()
    {
        return $this->belongsToMany(Tag::class);
    }
    

    在Tag类中,您将定义逆

    public function posts()
    {
        return $this->belongsToMany(Post::class);
    }
    

    阅读official docs中的更多内容 .

相关问题