Php 更改标准后为什么不能使用CActiveDataProvider

Php 更改标准后为什么不能使用CActiveDataProvider,php,yii,cactivedataprovider,Php,Yii,Cactivedataprovider,此代码工作正常: $criteria = new CDbCriteria; $criteria->compare('id', 1); $dataProvider = new CActiveDataProvider('User', array('criteria'=>$criteria)); foreach ($dataProvider->getData() as $value) var_dump($value->id); 但当我在创建CActiveDataProvide

此代码工作正常:

$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将如下所示:
其中id='1'和id='2'

如果要列出用户1和2,请尝试:

$criteria->compare('id', 2, false, 'OR');
或者干脆用


编辑:正如您在评论中所说的,您可以使用相同的criteria对象。

您没有任何结果,因为您正在向条件添加一个条件:生成的SQL将如下所示:
其中id='1'和id='2'

如果要列出用户1和2,请尝试:

$criteria->compare('id', 2, false, 'OR');
或者干脆用


编辑:正如您在评论中所说,您可以不使用相同的criteria对象。

您正在覆盖条件。不覆盖,只是添加一个比较条件,您的最终条件如下:
id='1'和id='2'
…但我在创建CActiveDataProvider实例后更改了条件!您应该了解参考资料:@soju,非常感谢,如果您通过新答案发布此评论,请确保我选中它以获得最佳答案;)实际上,我的问题是“如何为CActiveDataProvider使用一个标准,然后从相同的标准更改一些方法,并将其用于CActiveDataProvider的另一个新实例。”我阅读了这篇文章并找到了解决方案:$criteria2=clone$criteria$标准2->比较('id',2);您正在覆盖条件。不覆盖,只是添加一个比较条件,您的最终条件如下:
id='1'和id='2'
…但我在创建CActiveDataProvider实例后更改了条件!您应该了解参考资料:@soju,非常感谢,如果您通过新答案发布此评论,请确保我选中它以获得最佳答案;)实际上,我的问题是“如何为CActiveDataProvider使用一个标准,然后从相同的标准更改一些方法,并将其用于CActiveDataProvider的另一个新实例。”我阅读了这篇文章并找到了解决方案:$criteria2=clone$criteria$标准2->比较('id',2);我认为
附加条件
会更好:而不是执行
$criteria->compare('id',1)
$criteria->compare('id',2,false',OR')
您只需执行
$criteria->addInCondition('id',array(1,2))但我对使用标准没有问题!我希望为CActiveDataProvider使用一个条件,然后更改相同条件的一些方法,并将其用于CActiveDataProvider的另一个新实例。我认为
附加条件
会更好:而不是执行
$criteria->compare('id',1)
$criteria->compare('id',2,false',OR')
您只需执行
$criteria->addInCondition('id',array(1,2))但我对使用标准没有问题!我希望对CActiveDataProvider使用一个条件,然后从相同的条件更改一些方法,并将其用于CActiveDataProvider的另一个新实例。