2014-04-09 2 views
0

웹 응용 프로그램에서 특정 조건에 대한 레코드를 인쇄하고 싶습니다. 하지만 일치하는 조건에 대한 레코드가 많지만 출력은 0입니다. 이 코드는 다른 모델에서 볼 수 있습니다. "$ data"은 (는) 해당 모델에 속합니다.Yii 모델의 레코드 계산

내 코드를 구현했습니다.

$temp=CHtml::encode($data->name); 

     $find=ConsumerRequest::model()->findAllByAttributes(array('requested_vegetable'=>$temp)); 
     $count = count($find); 
     echo $count; 

어떻게 해결해야합니까?

+0

왜 데이터베이스로 피드하기 전에 HTML 인코딩을 사용하고 있습니까? 그게 여기서 문제가되는지 나는 모르지만, 당신이 뭔가 잘못하고 있다는 신호 일뿐입니다. 또한'findAllByAttributes' 대신'countByAttributes'를 사용하십시오. – Jon

+0

제거하고 그냥 작동하지 않는 tats를 반향하려고 시도했습니다. – user2492854

+0

짝수 countByAttributes가 출력에 변경을하지 않습니다. – user2492854

답변

0

이러한 방법을 시도 할 수 있습니다 :이 각 행에 대한 모든 데이터를 통해 당긴다로

$temp=CHtml::encode($data->name); 
$count = ConsumerRequest::model()->findAll(array("condition"=>"requested_vegetable = '$temp'")); 
$count = count($find); 
echo $count; 

또는

$temp=CHtml::encode($data->name); 
$Criteria = new CDbCriteria(); 
$Criteria->condition = "requested_vegetable = '$temp'"; 
$count = ConsumerRequest::model()->findAll($Criteria); 
$count = count($find); 
echo $count; 
+0

왜 당신은 직접 sql 문에 삽입하는'$ temp'를 바인드하지 않습니까? 또한'FindAll()'을 사용하면 모든 데이터를 가져 오는 것이 매우 비효율적이며'count() '를 사용하십시오. – Pitchinnate

+0

코드에서 오류를 발견했습니다. 정수 값만 비교합니다. 문자열 값이 아닙니다. 문자열 속성을 비교할 수있는 방법이 있습니까? – user2492854

+0

그게 작동해야합니다. @Pitchinnate가 말한대로'countByAttributes'를 사용하거나 시작하십시오. – Rorschach

1

내가 findAll() 기능을 사용하지 않을 것입니다. count() 또는 countByAttributes() 기능을 사용하면됩니다. 귀하의 문제는 아마도 다음과 같을 것입니다 :

$temp=CHtml::encode($data->name); 

대부분의 경우 HTML로 인코딩 된 데이터베이스에 저장하지 않을 것입니다. 단지이 일을보십시오 :

$count = ConsumerRequest::model()->countByAttributes(array('requested_vegetable'=>$data->name)); 
0

을 당신은 또한 다음과 같이 수행 할 수 있습니다 $query='SELECT COUNT(id.tbl) FROM tbl'; CMIIW에게

1

한번에 바로 클래스 구문 후 모델에 public $count를 추가. 그리고 CDbCriteria를 사용하여 고객 쿼리를 만드십시오.

+0

시도했습니다 ... 동일한 출력입니다. – user2492854