2011-12-16 69 views
2

我有這個上的活動記錄警予搜索

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

現在我想執行上$ reviewModel搜索操作,說我想如果id爲1的用戶發佈了一個審查或不進行搜索。那麼是否有任何由yii提供的功能。

注:我不想使用 $ reviewModel =評價::模型() - >的findAll(陣列( '條件'=> ''));正如我 需要的所有評論&然後執行搜索。

+1

$ reviewModel是一組模型。或者,Yii中的數組也是一樣的。使用您的首選算法在多維數組中找到您需要的值。那樣容易。 – Johnatan 2011-12-16 12:45:54

回答

0

這是我會推薦的,並且是很好的設計實踐,它也將允許從數據庫中獲得最佳性能,減少查詢量。我會讓你的評論與用戶有關係。作爲用戶將張貼許多評論。所以用戶HAS_MANY評論。和「複查」和HAS_ONE用戶。所以使用它並創建一個外鍵來建立關係。

所以你的用戶模型(關係)ID裏面有這樣的事情:

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

您的評論模型ID裏面有這樣的事情:

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

一旦你完成了所有的你必須做的是循環所有的用戶評論。如果它爲空,他們沒有任何評論。

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

和用戶 - >評論將包含該用戶的所有評論。

+0

我的問題與你的回答完全不同。我重複我想要的所有評論,然後執行搜索操作 – iThink 2011-12-16 16:54:51

0

不是我所知道的(如果我正確地理解你的問題)。 Yii提供了各種方式來從數據庫中獲得你想要的內容,而不是從內存中的活動記錄模型數組中獲得。

如果你想這樣做,這樣,然後獲取數據的數組,你已經做了,然後用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 
    } 
}