15

我有以下代码从模型中获取数据。

$notifyModel = Notification::model()->findByAttributes(array(
                  'user_id'=> Yii::app()->user->uid
               ));

现在我想计算提取的行数。既不$notifyModel->count()工作也不count($notifyModel)。这很简单,但谷歌搜索没有帮助。

4

11 回答 11

54
$notifyModels = Notification::model()->findAllByAttributes(array(
            'user_id'=> Yii::app()->user->uid
        ));

$count = count($notifyModels);

或者

$count = Notification::model()->countByAttributes(array(
            'user_id'=> Yii::app()->user->uid
        ));
于 2012-12-04T23:10:49.630 回答
30

count() 的正确用法:


    $userid =  Yii::app()->user->uid;
    $count = Notification::model()->count( 'user_id=:userid', array(':userid' => $userid));

请参阅http://www.yiiframework.com/doc/api/1.1/CActiveRecord#count-detail

于 2013-02-21T19:26:31.380 回答
4

尝试这个:

$userid =  Yii::app()->user->uid;

$notifyModel = Notification::model()->count(
           array('condition' => 'user_id=:userid', 
                 'params'=>array(':userid' => $userid)
                ));
于 2012-12-05T10:58:51.993 回答
3
$count = Notification::model()->countByAttributes(array(
    'user_id'=> Yii::app()->user->uid
));
于 2014-02-12T11:11:30.763 回答
2

简单的方法:

$model = News::model()->findAll(); //returns AR objects
         $count = count($model);
于 2014-01-08T03:35:11.267 回答
2

因为问题title是关于调用计数函数的in a model,所以我会为那些阅读本文的初学者添加一些:)

模型内的函数可能如下所示:

/**
 * Count the number of rows which match the user ID
 * @param int $uid The user ID
 * @return int The number of found rows
 */
public function getCountByUserID($uid)
{
    $count = $this->count(array(
        'condition'=>'user_id = :uid',
        'params'=>array(
            ':uid'=>$uid,
        ),
    ));
    return $count;
}
于 2013-06-18T09:46:41.297 回答
2

我认为它比其他人快得多

$userTable=User::model()->tableName();
$userid =  Yii::app()->user->uid;
$criteria=new CDbCriteria();
$criteria->select=count(id);
$criteria->compare('user_id',$userid);
$count=Yii::app()->db->commandBuilder->createFindCommand($userTable,$criteria)->queryScalar();
于 2014-06-03T16:31:06.083 回答
1

那个方法是错误的!您试图通过从数据库中选择所有行来加载服务器,但这是错误的方式!所有你需要做的:

$sql = "SELECT COUNT(*) FROM {{...table_name...}}";

$count = intval(Yii::app()->db
  ->createCommand($sql)
  ->queryScalar());

或者您可以在模型中创建函数:

Class User extends CActiveRecord
{
    private $_total;

    public function getTotalItems()
    {
        if( empty( $this->_total )) {
            $this->_total = intval(Yii::app()->db
                ->createCommand($sql)->queryScalar());
        }
        return $this->_total;
    }

}

那么你可以像这样使用这个函数:

$totalItems = User::model()->totalItems;

或者 :

$model = User::model()->findByPk( $uid );
$totalItems = $model->totalItems;

或者 :

$model = new User;
$totalItems = $model->totalItems;
于 2014-08-08T21:54:37.463 回答
1

这是最简单的方法:

$count = Table::Model()
         ->count("field=:field", array("field" => $fildID));
echo $count;
于 2014-04-29T06:36:28.910 回答
0

我强烈建议您使用 SQL 查询查找计数,否则它会降低您的系统性能。有三种方法可以通过 SQL 查询本身找出计数Yii 1 CActiveRecord,它们是:

1.count()方法

查找满足指定查询条件的行数。

例子 :

$count = Notification::model()->count('user_id'=> Yii::app()->user->uid);

2. countByAttributes() 方法(从 v1.1.4 开始可用)

查找具有指定属性值的行数。

例子 :

$count = Notification::model()->countByAttributes(array(
    'user_id'=> Yii::app()->user->uid
));

3.countBySql()方法

使用给定的 SQL 语句查找行数。这相当于CDbCommand::queryScalar使用指定的 SQL 语句和参数调用。

例子:

$count = Notification::model()
         ->countBySql("select *from notification where user_id=:userId",
            array(':userId'=>Yii::app()->user->uid)
           );

不要使用以下代码,会降低系统性能:

$notifyModels = Notification::model()->findAllByAttributes(array(
            'user_id'=> Yii::app()->user->uid
        ));
$count = count($notifyModels);

因为,有两个函数调用来查找计数

于 2019-09-12T09:31:51.767 回答
-1

在我的研究中,最简单和最佳实践如下所示。

$notifyModel = Notification::model()->count(array('user_id'=> Yii::app()->user->uid));
于 2019-04-09T07:26:46.123 回答