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

时间:2015-12-29 20:20:38

标签: php laravel eloquent laravel-5.1

我正在制作Laravel应用程序。

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

帖子

  • ID
  • 文本
  • 标题

标签

  • ID
  • 名称

PostTags

  • ID
  • TAG_ID
  • POST_ID

这是" HasManyThrough" Laravel / Eloquent的关系?我尝试使用

设置我的模型
public function tags()
{
   return $this->hasManyThrough('App\Tag', 'App\PostTag')
}

然而,这不起作用 - 抛出异常告诉我列名称不存在。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

这不是一种多任务关系。

帖子可以属于许多标签(例如:帖子" Foobar"可以属于" foo"以及" bar"标签)。标签可以属于许多帖子(例如:标签" foo"可以属于帖子" Foobar"以及"另一个帖子")。

所以,在Post类中你会有

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

并在Tag类中定义反向

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

official docs中阅读更多内容。