2011-12-16 3 views
2

나는이YII 검색

$reviewModel=Review::model()->findAll(); 

가 지금은 $ reviewModel에 대한 검색 작업을 수행 할했습니다 내가 ID 1의 사용자 리뷰를 게시하거나하지 않은 경우 검색하고 싶은 말은. yii가 제공하는 함수가 있습니다.

참고 : 나는 그나마) $ reviewModel = 검토 :: 모델을 (사용하려면 -> findall은 (배열 ('조건'=> '')); 내가 모든 리뷰가 필요합니다 & 다음 검색을 수행합니다.

+1

$ reviewModel은 모델 배열입니다. 또는 Yii 배열의 배열은 무엇입니까? 원하는 알고리즘을 사용하여 다차원 배열 내에서 필요한 값을 찾으십시오. 그것으로 간단합니다. – Johnatan

답변

0

이것은 내가 권장하는 좋은 설계 연습으로 데이터베이스에서 최적의 성능을 얻고 쿼리의 양을 줄입니다. 나는 당신의 리뷰를 사용자와의 관계로 만들 것이다. 사용자가 많은 리뷰를 올릴 것입니다. 그래서 사용자 HAS_MANY 리뷰. 검토 및 HAS_ONE 사용자. 그래서 그것을 사용하고 외래 키를 만들어 관계를 구축하십시오. 리뷰 모델 ID 내부 지금

'reviews' => array(self::HAS_MANY, 'Review', 'originator), 

이런 식으로 뭔가를 : 사용자 모델 (관계) ID 내부 그래서

는 다음과 같이이

'user' => array(self::BELONGS_TO, 'User', 'originator'), 

작업을 완료하고 나면 모든 모든 사용자 리뷰를 통해 반복해야 할 것입니다. 그것의 null 경우, 그들은 어떤 리뷰가 필요하지 않습니다.

$user = User::model()->findbyPk(1); 

및 user-> reviews에는 해당 사용자의 모든 리뷰가 포함됩니다.

+0

내 질문은 당신의 대답과 완전히 다릅니다. 나는 모든 리뷰를 원하고 그 다음에 검색 작업을 수행한다. – iThink

0

(귀하의 질문을 정확하게 이해하는 경우) 알고 있지 않습니다. Yii는 DB에서 원하는 내용을 묻는 다양한 방법을 제공하지만 메모리에있는 활성 레코드 모델의 배열에서는 제공하지 않습니다.

이렇게하려면이 방법으로 원하는대로 데이터 배열을 가져온 다음 PHP를 사용하여 원하는 배열을 찾는 모델 배열을 반복합니다.

0

수동으로 필터링 할 수 있습니다. 예 :

$reviewModel=Review::model()->findAll(); 

$matched = false; 
foreach($reviewModel as $r) //cycle through each review 
{ 
    if($r->user == 1)   //check if user is desired 
    { 
     $matched = true; //set matched as true 
     break;  //stop searching, as we already found one 
    } 
} 

여러 항목을 검색하려면 일치하는 배열을 사용하여 해당 배열을 확인할 수 있습니다.

$reviewModel=Review::model()->findAll(); 

$wanted = array(0=>false,3=>false,6=>false,8=>false); 

foreach($reviewModel as $r) //cycle through each review 
{ 
    if(isset($wanted[$r->user]) and !$wanted[$r->user]) //check if user is in wanted list and still false 
    { 
     $wanted[$r->user] == true; //set appropiate user to true 
    } 
}