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

时间:2015-03-04 12:37:15

标签: php yii

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

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

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

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

非常感谢您的帮助。感谢。

修改

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

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

1 个答案:

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

  }
}