Yii2迁移中的多对多关系
Many-to-many relation in Yii2 migration
我有 2 个 table,post
和 comment
。在 Laravel 中,我可以通过在模型中定义关系来隐式创建枢轴 table comment_post
。我怎样才能在 Yii2 中做同样的事情?
table post:
id -- PK
text
table评论:
id -- PK
text
user_id
table comment_post:
id -- PK
post_id -- foreign key references ID on post table
comment_id -- foreign key references ID on comment table
假设您有一个名为 "user" 的 table,其 pk 名为 "id"
从命令行进行以下迁移:
yii migrate/create create_post_table --fields="text:text"
yii migrate/create create_comment_table --fields="text:text,user_id:integer:notNull:foreignKey(user)"
yii migrate/create create_postComment_table --fields="post_id:integer:notNull:foreignKey(post),comment_id:integer:notNull:foreignKey(comment)"
然后运行:
yii migrate
然后使用gii生成活动记录classes,关系会自动生成。
然后,例如,您可以使用以下语法:$post->comments
关于迁移的更多信息:http://www.yiiframework.com/doc-2.0/guide-db-migrations.html
因评论而更新:
为了简化 $post->comments
语法,在您的 Post class 中,您将拥有如下函数:
public function getComments()
{
return $this->hasMany(Comment::classname(),['id'=>'comment_id'])
->viaTable('postComment',['post_id','id']);
}
我有 2 个 table,post
和 comment
。在 Laravel 中,我可以通过在模型中定义关系来隐式创建枢轴 table comment_post
。我怎样才能在 Yii2 中做同样的事情?
table post:
id -- PK
text
table评论:
id -- PK
text
user_id
table comment_post:
id -- PK
post_id -- foreign key references ID on post table
comment_id -- foreign key references ID on comment table
假设您有一个名为 "user" 的 table,其 pk 名为 "id"
从命令行进行以下迁移:
yii migrate/create create_post_table --fields="text:text"
yii migrate/create create_comment_table --fields="text:text,user_id:integer:notNull:foreignKey(user)"
yii migrate/create create_postComment_table --fields="post_id:integer:notNull:foreignKey(post),comment_id:integer:notNull:foreignKey(comment)"
然后运行:
yii migrate
然后使用gii生成活动记录classes,关系会自动生成。
然后,例如,您可以使用以下语法:$post->comments
关于迁移的更多信息:http://www.yiiframework.com/doc-2.0/guide-db-migrations.html
因评论而更新:
为了简化 $post->comments
语法,在您的 Post class 中,您将拥有如下函数:
public function getComments()
{
return $this->hasMany(Comment::classname(),['id'=>'comment_id'])
->viaTable('postComment',['post_id','id']);
}