我有以下代码从模型中获取数据。
$notifyModel = Notification::model()->findByAttributes(array(
'user_id'=> Yii::app()->user->uid
));
现在我想计算提取的行数。既不$notifyModel->count()
工作也不count($notifyModel)
。这很简单,但谷歌搜索没有帮助。
$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
));
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
尝试这个:
$userid = Yii::app()->user->uid;
$notifyModel = Notification::model()->count(
array('condition' => 'user_id=:userid',
'params'=>array(':userid' => $userid)
));
$count = Notification::model()->countByAttributes(array(
'user_id'=> Yii::app()->user->uid
));
简单的方法:
$model = News::model()->findAll(); //returns AR objects
$count = count($model);
因为问题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;
}
我认为它比其他人快得多
$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();
那个方法是错误的!您试图通过从数据库中选择所有行来加载服务器,但这是错误的方式!所有你需要做的:
$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;
这是最简单的方法:
$count = Table::Model()
->count("field=:field", array("field" => $fildID));
echo $count;
我强烈建议您使用 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);
因为,有两个函数调用来查找计数
在我的研究中,最简单和最佳实践如下所示。
$notifyModel = Notification::model()->count(array('user_id'=> Yii::app()->user->uid));