在 Yii 框架中检索记录的子模型


Retrieve the child model of a record in Yii Framework

我正在尝试了解如何获取CActiveRecord模型的子类的模型。

我有以下两个基本类:

  • User类扩展CActiveRecord
  • Tutor类扩展User

它们之间的联系是表userstutors中的fkid。在我当前的应用程序中,我正在实例化User类,但我还需要来自Tutor的数据。

GII将关系设定如下:

For User class:
public function relations()
    {
        return array(
            'tutor' => array(self::HAS_MANY, 'Tutors', 'user_id'),
        );
    }

For Tutor class:
public function relations()
{
    return array(
        'user' => array(self::BELONGS_TO, 'Users', 'user_id'),
    );
}

如何才能使用填充了来自两个模型的数据的对象?

注意:我的数据库表以复数形式命名,而模型以单数形式命名。

查询活动记录模型时,它应自动引入相关对象(前提是已正确设置它们的关系(。像下面这样的东西给你一个开始。

$users=User::model()->findAll();

根据您对数据执行的操作,您需要决定是希望延迟获取相关表还是急切地获取它们。以下将急切地获取记录。

$users=User::model()->with('tutor')->findAll();

关于这个主题的 Yii 文档非常好,非常值得一读:http://www.yiiframework.com/doc/guide/1.1/en/database.arr#performing-relational-query

显然,一个对象的同级可以在 Yii 中简单地使用以下命令来访问:

$model->tutors

其中tutors表示与同级对应的表。如果与子级的关系HAS_MANY,则该命令将返回一个或多个数组,每个数组都包含同级的一个实例。如果是 1:1 (HAS_ONE( 关系,命令将直接返回对象。