首页 文章

在Yii2中创建一对多关系

提问于
浏览
3

假设我们有两个实体:User和Post .

根据我的理解,为了在User和Post之间 Build 一对多关系,您需要执行以下操作:

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文档对我来说不是很清楚 .

1 回答

  • 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 ,则可以省略 Post 模型中的 user 关系声明 . 您可以声明仅用于使用的关系 .

相关问题