我们说我们有两个实体:用户和帖子。
据我了解,为了在User和Post之间建立一对多关系,您需要执行以下操作:
class User {
...
public function getPosts()
{
return $this->hasMany(Order::className(), ['user_id' => 'id']);
}
}
class Post {
...
public function getUser()
{
return $this->hasOne(Order::className(), ['id' => 'user_id']);
}
}
这是对的吗?还有什么我需要添加才能使一切正常吗? Yii2文档对我来说不是很清楚。
答案 0 :(得分:6)
是的,这已经足够了(除了你插入了Order
类名),但是也建议为关系添加PHPDoc:
User
型号:
/**
* ...
*
* @property Post[] $posts
*/
class User
{
/**
* @return \yii\db\ActiveQuery
*/
public function getPosts()
{
return $this->hasMany(Post::className(), ['user_id' => 'id']);
}
}
Post
型号:
/**
* ...
*
* @property User $user
*/
class Post
{
/**
* @return \yii\db\ActiveQuery
*/
public function getUser()
{
return $this->hasOne(User::className(), ['id' => 'user_id']);
}
}
然后,如果您使用的是IDE,那么当您致电$user->posts
或$post->user
时,您将获得完全自动完成功能。它也很有用,因为您只需查看文件的顶部即可看到关系列表,因为作为虚拟属性访问的关系,$user->getPosts()
调用将返回yii\db\ActiveQuery
对象而不是\yii\db\ActiveRecord
数组。最好将它们与linebreak与模型属性分开(它们也被添加用于自动完成并查看相应数据库表的结构而不查看数据库)。
顺便说一句,如果使用Gii生成模型,如果正确指定了外键,则会自动生成关系和PHPDoc。
请注意,如果您不需要使用$post->user
,则可以省略user
模型中的Post
关系声明。您可以声明仅用于使用的关系。