我有模特儿帖子和标签。和多对多的关系。
帖子:
public function getTags()
{
return $this->hasMany(Tag::className(), ['id' => 'tag_id'])
->viaTable('post_tag', ['post_id' => 'id']);
}
标签:
public function getPosts()
{
return $this->hasMany(Post::className(), ['id' => 'post_id'])
->viaTable('post_tag', ['post_id' => 'id']);
}
和表格后标记:
但是当我尝试发布标签时:
$tags = $post->tags;
我得到一个空变量;
-------------------------
| Post-tag table: |
-------------------------
| id | post_id | tag_id |
-------------------------
| 8 | 2 | 1 |
-------------------------
答案 0 :(得分:0)
确保在调用关系的Catch
中已将相关标签保存在post_tag
表中。
此外,您还必须更正post
模型内部的关系,在调用Tags
时需要指定'tag_id'=>'id'
而不是'post_id'=>'id'
。
viaTable()
答案 1 :(得分:-1)
帖子:
public function getTags() {
return $this->hasMany ( Tag::className (), [
'post_id' => 'post_id'
] )
}
标签:
实际上不需要;
public function getPosts() {
return $this->hasMany ( Post::className (), [
'post_id' => 'post_id'
] )
}
$tags = $post->tags;
现在会给您一个对象!