他们分别代表这几个类
const BELONGS_TO='CBelongsToRelation'; const HAS_ONE='CHasOneRelation'; const HAS_MANY='CHasManyRelation'; const MANY_MANY='CManyManyRelation'; const STAT='CStatRelation';
public function relations() { // NOTE: you may need to adjust the relation name and the related // class name for the relations automatically generated below. return array( 'city'=>array(self::BELONGS_TO,'City','city_id'), ); }
public function actionRelation($id){ $id = trim($id); //懒惰加载 $user = User::model()->findByPk($id); //此时的user对象的related属性是一个空数组,user对象的打印结果如下图 dump($user); // $city = $user->city; // dump($city); }
public function actionRelation($id){ $id = trim($id); //懒惰加载 $user = User : : model() - > findByPk($id); //此时的user对象的related属性是一个空数组,user对象的打印结果如下图 // dump($user); //获取与user对象相关联的city对象,调用city属性的时候,会调用relations方法里面city对应的 关联关系 找到city对象 $city = $user - > city; //打印结果见下图 dump($city);
public function actionRelation($id){ $id = trim($id); //懒惰加载 $user = User::model()->findByPk($id); //此时的user对象的related属性是一个空数组,user对象的打印结果如下图 // dump($user); //获取与user对象相关联的city对象,调用city属性的时候,会调用relations方法里面city对应的 关联关系 找到city对象 $city = $user->city; // dump($city); //此时我们再打印user对象,related属性就不是一个空数组了,打印结果如下图 dump($user,false); //我们可以像调用user属性一样去调用city对象的属性,比如我想获取城市名 dump($city->name); }
public function actionEager($id){ $id = trim($id); //饥渴式加载 $user = User::model()->with('city')->findByPk($id); dump($user); }
我们看到打印结果,如果使用with关键词之后,默认就已经将city表对应数据加载到user对象的related属性中
//饥渴式加载我们使用到关键词with在find之前 public function actionEager($id){ $id = trim($id); //饥渴式加载 $user = User::model()->with('city')->findByPk($id); // dump($user); //获取城市名称 $name = $user->city->name; //打印结果如下 dump($name); }'广州'
user_info表 建表语句 CREATE TABLE `user_info` ( `id` int(10) unsigned NOT NULL auto_increment, `user_id` int(10) unsigned NOT NULL default '0' COMMENT '用户ID', `info` text character set utf8 NOT NULL COMMENT '简介', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='用户信息表
//添加一个user_info 的关联关系 public function relations() { // NOTE: you may need to adjust the relation name and the related // class name for the relations automatically generated below. return array( 'city'=>array(self::BELONGS_TO,'City','city_id'), 'user_info'=>array(self::HAS_ONE,'UserInfo','user_id'), ); }在饥渴式加载中如下使用,with方法中添加一个参数user_info即可
public function actionEager($id){ $id = trim($id); //饥渴式加载 $user = User::model()->with('city','user_info')->findByPk($id); dump($user); }打印结果如下图,可以看到city对象与user_info对象都已经加载到user对象的related属性中了