//Yii1.1 Stable,CActiveRecord line 1185:
public function findAll($condition='',$params=array())
{
if($condition instanceof CDbCriteria && !empty($condition->with) || is_array($condition) && isset($condition['with']))
return $this->with($condition->with)->findAll($condition);
Yii::trace(get_class($this).'.findAll()','system.db.ar.CActiveRecord');
$criteria=$this->getCommandBuilder()->createCriteria($condition,$params);
return $this->query($criteria,true);
}
if we define option 'with' in a condition like :
$models=Member::model()->findAll(array(
'with'=>array('sales'),
'limit'=>10,
'offset'=>1,
));//then this line in AR will be executed: return $this->with($condition->with)->findAll($condition); // ~~~~~~~~~~~~~~~~It's null because we should use $condition['with']
This bug will disable eager loading when we define with option directly in condition.
the trace log is :
2010/01/12 22:24:54 [trace] [system.db.ar.CActiveRecord] Member.findAll() eagerly
2010/01/12 22:24:54 [trace] [system.db.CDbCommand] Querying SQL: SELECT `t`.`mid` AS `t0_c0`, `t`.`name` AS `t0_c1`, `t`.`password` AS `t0_c2`, `t`.`data` AS `t0_c3`, `t`.`expire_time` AS `t0_c4`, `t`.`del_flag` AS `t0_c5`, `t`.`email` AS `t0_c6`, `t`.`sales_id` AS `t0_c7`, `t`.`remark` AS `t0_c8`, `t`.`last_login_time` AS `t0_c9`, `t`.`login_times` AS `t0_c10`, `t`.`created` AS `t0_c11`, `t`.`modified` AS `t0_c12` FROM `member` `t` LIMIT 10 OFFSET 1
2010/01/12 22:24:54 [trace] [system.db.ar.CActiveRecord] lazy loading Member.sales
2010/01/12 22:24:54 [trace] [system.db.CDbCommand] Querying SQL: SELECT `sales`.`mid` AS `t1_c0`, `sales`.`name` AS `t1_c1`, `sales`.`password` AS `t1_c2`, `sales`.`data` AS `t1_c3`, `sales`.`expire_time` AS `t1_c4`, `sales`.`del_flag` AS `t1_c5`, `sales`.`email` AS `t1_c6`, `sales`.`sales_id` AS `t1_c7`, `sales`.`remark` AS `t1_c8`, `sales`.`last_login_time` AS `t1_c9`, `sales`.`login_times` AS `t1_c10`, `sales`.`created` AS `t1_c11`, `sales`.`modified` AS `t1_c12` FROM `member` `sales` WHERE (`sales`.`mid`=:ypl0)
.....

Help












