【问题标题】:Yii : Check if $criteria->compare from CDbCriteria matched the value or notYii : 检查 CDbCriteria 中的 $criteria->compare 是否匹配该值
【发布时间】:2015-03-04 12:37:14
【问题描述】:

有什么方法可以检查指定的条件是否成功。我正在尝试计算匹配的标准数量并相应地对结果进行排名。

$criteria->compare('users.id', $id);

如果上述条件确实产生匹配,请执行rank++

我发现上面的语句返回了criteria 对象本身。所以,我真的很困惑找到一种方法来做到这一点。

感谢您的帮助。谢谢。

编辑

$count=YourModel::model()->countByAttributes(array('user_id'=>$id));

给我匹配的总行数。我想确定哪个特定行是匹配的,并对该行进行排名并根据排名对结果进行排序。

【问题讨论】:

    标签: php yii


    【解决方案1】:

    其实CDbCriteria只是一个搜索条件。这不是数据检索器。它只是设置条件。要检索数据,您需要使用 CActiveDataProviderActiveRecord
    我不知道你想在哪里使用上面的代码,但我建议使用下面的代码

    $count=YourModel::model()->countByAttributes(array('user_id'=>$id));
    

    或者如果您使用的是CActiveDataProvider,那么

    $dataProvider=new CActiveDataProvider('YourModel',array(
    'criteria'=>$yourCriteria
    ));
    $count=$dataProvider->totalItemCount;
    

    编辑:

    我想确定匹配的特定行并对该行进行排名 并根据排名对结果进行排序。

    参考您的上述问题。实际上,您无法使用它来识别该行。 Mysql 允许 Triggers 但您只能将它们与 INSERT,DELETE,UPDATE 之类的语句一起使用。因此,如果您想修改数据库,那么您需要检索所有符合您的条件的行。将它们放入 foreach 循环中,对它们进行排名并保存模型。

    $models=YourModel::model()->findAll($yourCriteria);
    
    if(isset($models))
    {
      foreach($models as $model)
      {
        $model->rank=i;
        $model->save();
        i++;//rank number
    
      }
    }
    

    【讨论】:

    • 我明白了CDbCriteria 只是一个标准。但是有什么方法可以让我知道哪些字段实际上符合我的标准?无需将所有数据存储在数组/对象中,然后计算其上的所有内容。
    • 就像你说的 $count=YourModel::model()->countByAttributes(array('user_id'=>$id)); 给了我匹配的总行数。我想确定哪个特定行是匹配的,然后对该行进行排名并根据排名对结果进行排序。
    • 感谢您的回答。清理了很多东西。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多