我正在尝试了解如何获取CActiveRecord模型的子类的模型。
我有以下两个基本类:
User
类扩展CActiveRecord
Tutor
类扩展User
它们之间的联系是表users
表tutors
中的fk
的id
。在我当前的应用程序中,我正在实例化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
( 关系,命令将直接返回对象。