yii搜索活动记录

时间:2011-12-16 12:34:45

标签: php search yii

我是这个

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

现在我想对$ reviewModel执行搜索操作,比方说我想搜索id为1的用户是否发布了评论。所以yii提供了任何功能。

  

注意:我不想使用   $ reviewModel =评价::模型() - >的findAll(阵列( '状态'=> ''));就像我一样   需要所有评论&然后进行搜索。

3 个答案:

答案 0 :(得分:0)

这是我推荐的,也是良好的设计实践,它还可以实现数据库的最佳性能,+减少查询量。我会让你的评论与用户有关系。用户将发布许多评论。所以用户HAS_MANY评论。和审查和HAS_ONE用户。所以使用它并创建一个外键来建立关系。

因此,在您的用户模型(Relations)中,ID具有以下内容:

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

现在您的评论模型ID中包含以下内容:

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

完成所有操作后,您需要做的就是遍历所有用户评论。如果它为null,则它们没有任何评论。

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

和user->评论将包含该用户的所有评论。

答案 1 :(得分:0)

不是我知道(如果我理解你的问题)。 Yii提供了各种方法来询问你想从数据库中得到什么,而不是从内存中的一系列活动记录模型中询问。

如果你想这样做,那么就像你已经做的那样获取数据数组,然后使用PHP迭代模型数组,寻找你想要的东西。

答案 2 :(得分: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
    }
}