优化ActiveRecord的relation model取值

    技术2026-06-06  6

     

    ActiveRecord的relations定义相关的类,可以很方便的取到相应的值。

    比如:

    class User extends CActiveRecord { …… public function relations() { return array( 'group' => array(self::BELONGS_TO, 'Group', 'group_id'), ); } …… } 

    可以很方便的通过$user->group获取Group的实例化类,但是问题随之而来,如果group这个表很大,对应的字段很多,CActiveRecord在取值的时候会把这些值都取出来,可是往往我们需要的仅仅是其中的一两个字段而已,这就需要在with的时候设置select信息。

     

    如:

    $criteria = new CDbCriteria(); $criteria->distinct = true; $criteria->select = " t.* "; $criteria->condition = " 1=1 "; $criteria->with = array('teacher'=> array('select'=>'username,company_id', 'order'=>'teacher.username ASC') ); 

    这样才能减少载入的字段。

     

    试想,如果通过方法实例化本类的时候通过defaultScope()方法获取字段,with相关类的时候只取我们需要的字段就好多了,今天惊奇的发现,Yii可以!

     

    最新回复(0)