在activerecords上返回错误的计数

时间:2014-02-20 15:14:05

标签: activerecord yii

我正在尝试计算记录数。我们看了几天,计数不正确。没有任何东西时它会一直返回1。所有其他型号的计数都正确返回,所以这个非常棒。我还需要检查其他任何地方吗?

已经看过的事情:

  1. var_dump:所以返回0;一切都如预期;
  2. 检查范围是否存在某种冲突;
  3. $pending = count(Model::model()->pending());

    规则在模型中是安全的。型号:

    public function pending()
        {
            $criteria = new CDbCriteria;
    
            $now = new CDbExpression("NOW()");
            $criteria->addCondition('effective_to_date > '.$now);
            $criteria->addCondition('effective_from_date < '.$now);
            $criteria->compare('target_accept',"ACCEPTED");
    
            return new CActiveDataProvider($this, array(   'criteria'=>$criteria,  ));
        }   
    

2 个答案:

答案 0 :(得分:2)

试试这段代码:

$dp = Model::model()->pending();
echo count($dp->getData())

答案 1 :(得分:1)

您正在做的是返回CActiveDataProvider实例,该实例本身不包含数据,而您可以使用方法getData()获取对象列表。 你可以写这样的

public function pending()
    {
        $criteria = new CDbCriteria;

        $now = new CDbExpression("NOW()");
        $criteria->addCondition('effective_to_date > '.$now);
        $criteria->addCondition('effective_from_date < '.$now);
        $criteria->compare('target_accept',"ACCEPTED");
        $dataProvider=new CActiveDataProvider($this, array(   'criteria'=>$criteria,  ));
        return $dataProvider->getData();
    }  

此外,您可以使用totalItemCount之类的属性$dataProvider->totalItemCount来获取记录总数。然后你可以直接在你的左值中使用这个计数

$pending=Model::model()->pending()