2013-03-21 2 views
0

이 코드가 작동 미세 기준 변경 후 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은 다음과 같이됩니다 생성 :

+0

기준을 덮어 쓰는 중입니다. –

+0

덮어 쓰지 않고 그냥 비교 조건을 추가하면 최종 조건은 다음과 같습니다 :'id = '1'AND id = '2 '' ... – soju

+0

그러나 CActiveDataProvider 인스턴스를 생성 한 후에 기준을 변경합니다! –

답변

3

당신은 당신이 당신의 기준과 조건을 추가되기 때문에 어떤 결과가 없습니다 나열 할 경우 WHERE id='1' AND id='2'

사용자 1과 2는 당신이 시도해야합니다 :

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

또는 단순히 addInCondition을 사용하십시오.

EDIT : 귀하가 귀하의 의견에 말했듯이 동일한 기준 개체를 사용하는 대신 clone it을 사용할 수 있습니다.

+0

'$ criteria-> compare ('id', 1);''$ criteria->를 사용하는 대신에'addInCondition'이 더 좋을 것이라고 생각한다. – darkheir

+0

네, 그게 내가 언급 한 이유가 – soju

+0

인데, 그 이유는 다음과 같습니다 : compare ('id', 2, false, 'OR');'단순히 $ criteria-> addInCondition ('id', array (1,2)); 하지만 기준에 대한 작업에는 문제가 없습니다! CActiveDataProvider에 대해 하나의 기준을 사용하고 동일한 기준에서 일부 메서드를 변경하고 CActiveDataProvider의 다른 새 인스턴스에 사용합니다. –