//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] [color="#FF0000"]Member.findAll() eagerly[/color]
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] [color="#FF0000"]lazy loading[/color] 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)
…