我有这个上的活动记录警予搜索
$reviewModel=Review::model()->findAll();
现在我想执行上$ reviewModel搜索操作,说我想如果id为1的用户发布了一个审查或不进行搜索。那么是否有任何由yii提供的功能。
注:我不想使用 $ reviewModel =评价::模型() - >的findAll(阵列( '条件'=> ''));正如我 需要的所有评论&然后执行搜索。
我有这个上的活动记录警予搜索
$reviewModel=Review::model()->findAll();
现在我想执行上$ reviewModel搜索操作,说我想如果id为1的用户发布了一个审查或不进行搜索。那么是否有任何由yii提供的功能。
注:我不想使用 $ reviewModel =评价::模型() - >的findAll(阵列( '条件'=> ''));正如我 需要的所有评论&然后执行搜索。
这是我会推荐的,并且是很好的设计实践,它也将允许从数据库中获得最佳性能,减少查询量。我会让你的评论与用户有关系。作为用户将张贴许多评论。所以用户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);
和用户 - >评论将包含该用户的所有评论。
我的问题与你的回答完全不同。我重复我想要的所有评论,然后执行搜索操作 – iThink 2011-12-16 16:54:51
不是我所知道的(如果我正确地理解你的问题)。 Yii提供了各种方式来从数据库中获得你想要的内容,而不是从内存中的活动记录模型数组中获得。
如果你想这样做,这样,然后获取数据的数组,你已经做了,然后用PHP通过模型寻找你想要的阵列进行迭代。
您可以通过手动进行过滤。例如:
$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
}
}
$ reviewModel是一组模型。或者,Yii中的数组也是一样的。使用您的首选算法在多维数组中找到您需要的值。那样容易。 – Johnatan 2011-12-16 12:45:54