Yii: как считать записи в модели?
У меня есть следующий код для извлечения данных из модели.
$notifyModel = Notification::model()->findByAttributes(array(
'user_id'=> Yii::app()->user->uid
));
Теперь я хочу подсчитать количество выбранных строк.
Ни $notifyModel->count()
не работает, ни count($notifyModel)
.
Это очень просто, но googling не помогло.
Ответы
Ответ 1
$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
));
Ответ 2
правильное использование 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
Ответ 3
попробуйте следующее:
$userid = Yii::app()->user->uid;
$notifyModel = Notification::model()->count(
array('condition' => 'user_id=:userid',
'params'=>array(':userid' => $userid)
));
Ответ 4
простые способы:
$model = News::model()->findAll(); //returns AR objects
$count = count($model);
Ответ 5
$count = Notification::model()->countByAttributes(array(
'user_id'=> Yii::app()->user->uid
));
Ответ 6
Я думаю, что это намного быстрее, чем другие
$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();
Ответ 7
Поскольку вопросы title
о вызове функции count 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;
}
Ответ 8
Это похоже на самый простой способ сделать это
$count = Таблица:: Model() → count ( "field =: field", array ( "field" = > $fildID));
echo $count;
Ответ 9
Этот метод неверен!
Вы пытаетесь получить, выбрав все строки из базы данных, вы загружаете сервер, но это неправильно!
Все, что вам нужно сделать:
$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;
Ответ 10
В моем исследовании, самая простая и лучшая практика, как показано ниже.
$notifyModel = Notification::model()->count(array('user_id'=> Yii::app()->user->uid));