Yii:检查 CDbCriteria 中的 $criteria->compare 是否匹配该值

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

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

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

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

我发现上面的语句 returns 是 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;

编辑:

I want to identify which particular row was a match and rank that row and sort the results according to the rank.

参考你上面的问题。实际上,您无法使用该行来识别该行。 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

  }
}