为什么不工作CActiveDataProvider后更改标准


Why does not work CActiveDataProvider after change criteria

代码运行正常:

$criteria = new CDbCriteria;
$criteria->compare('id', 1);
$dataProvider = new CActiveDataProvider('User', array('criteria'=>$criteria));
foreach ($dataProvider->getData() as $value) var_dump($value->id);

但是当我在创建CActiveDataProvider实例后改变标准时,这不起作用:

$criteria = new CDbCriteria;
$criteria->compare('id', 1);
$dataProvider = new CActiveDataProvider('User', array('criteria'=>$criteria));
$criteria->compare('id', 2);
foreach ($dataProvider->getData() as $value) var_dump($value->id);

返回空!为什么会这样?

您没有任何结果,因为您正在向您的标准添加条件:生成的SQL将看起来像这样:WHERE id='1' AND id='2'

如果你想列出用户1和2,你应该尝试:

$criteria->compare('id', 2, false, 'OR');

或者直接使用addInCondition

EDIT:正如您在评论中所说,您可以克隆它,而不是使用相同的标准对象。