【问题标题】:yii search on active recordsyii 搜索活动记录
【发布时间】:2011-12-16 12:34:45
【问题描述】:

我有这个

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

现在我想对 $reviewModel 执行搜索操作,比如我想搜索 id 1 的用户是否发布了评论。那么yii有没有提供什么功能呢。

注意:我不想使用 $reviewModel=Review::model()->findAll(array('condition'=>''));正如我 需要所有评论,然后执行搜索。

【问题讨论】:

  • $reviewModel 是一个模型数组。或者,在 Yii 中,数组数组有什么相同之处。使用您喜欢的算法在多维数组中查找您需要的值。就这么简单。

标签: php search yii


【解决方案1】:

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

所以在您的用户模型(关系)ID 中有这样的内容:

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

现在在您的评论模型 ID 中有这样的内容:

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

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

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

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

【讨论】:

  • 我的问题和你的回答完全不同。我再说一遍,我想要所有评论,然后对其执行搜索操作
【解决方案2】:

我不知道(如果我正确理解您的问题)。 Yii 提供了多种方法来从数据库中查询您想要的内容,而不是从内存中的活动记录模型数组中查询。

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

【讨论】:

    【解决方案3】:

    您可以手动过滤它们。例如:

    $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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-06
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      相关资源
      最近更新 更多