Yii:检查$criteria->;来自CDbWriter的compare是否与值匹配


Yii : Check if $criteria->compare from CDbCriteria matched the value or not

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

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

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

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

将感谢您的帮助。谢谢

编辑

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

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

实际上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
  }
}