2011-12-16 70 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 
    } 
}