在Yii2中创建一对多关系

在Yii2中创建一对多关系,yii2,entities,Yii2,Entities,假设我们有两个实体:User和Post 据我所知,为了在用户和帖子之间建立一对多关系,您需要执行以下操作: class User { ... public function getPosts() { return $this->hasMany(Order::className(), ['user_id' => 'id']); } } class Post { ... public function getUser()

假设我们有两个实体: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文档对我来说不是很清楚。

是的,这就足够了(除了您插入了
Order
类名),但是也建议为关系添加PHPDoc:

用户
型号:

/**
 * ...
 *
 * @property Post[] $posts
 */
class User
{

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getPosts()
    {
        return $this->hasMany(Post::className(), ['user_id' => 'id']);
    }

}
/**
 * ...
 *
 * @property User $user
 */
class Post
{

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getUser()
    {
        return $this->hasOne(User::className(), ['id' => 'user_id']);
    }

}
Post
型号:

/**
 * ...
 *
 * @property Post[] $posts
 */
class User
{

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getPosts()
    {
        return $this->hasMany(Post::className(), ['user_id' => 'id']);
    }

}
/**
 * ...
 *
 * @property User $user
 */
class Post
{

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getUser()
    {
        return $this->hasOne(User::className(), ['id' => 'user_id']);
    }

}
然后,当您调用
$user->posts
$post->user
时,如果您使用IDE,您将获得完全自动完成。它也很有用,因为您只需查看文件顶部即可查看关系列表,因为作为虚拟属性访问的关系,
$user->getPosts()
调用将返回
yii\db\ActiveQuery
对象,而不是
\yii\db\ActiveRecord
数组。最好使用linebreak将它们与模型属性分开(它们也是为了自动完成而添加的,并且在不查看数据库的情况下查看相应数据库表的结构)

顺便说一下,如果您使用Gii生成模型,如果您正确指定了外键,关系和PHPDoc将自动生成


请注意,如果不需要使用
$post->user
,可以在
post
模型中省略
user
关系声明。您可以声明仅用于使用的关系。

请更具体一些。什么不起作用?或者你想做什么?代码似乎是正确的,如果你想与订单模型建立关系,但我想你想在Post和User类之间建立关系,这是正确的吗?