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
        ));

Ответ 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));