web-dev-qa-db-fra.com

Yii: comment compter les enregistrements dans un modèle?

J'ai le code suivant pour récupérer les données d'un modèle. 

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

Maintenant, je veux compter le nombre de lignes extraites. Ni $notifyModel->count() travail ni count($notifyModel). C'est très simple mais googler n'a pas aidé.

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

$count = count($notifyModels);

Ou

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

le bon usage de count ():


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

Veuillez consulter http://www.yiiframework.com/doc/api/1.1/CActiveRecord#count-detail

29
Paul Gladkov

essaye ça:

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

$notifyModel = Notification::model()->count(
           array('condition' => 'user_id=:userid', 
                 'params'=>array(':userid' => $userid)
                ));
4
Arfeen

Je pense que c'est beaucoup plus rapide que d'autres

$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();
3
Always Sunny

des moyens simples:

$model = News::model()->findAll(); //returns AR objects
         $count = count($model);
3
trai bui
$count = Notification::model()->countByAttributes(array(
    'user_id'=> Yii::app()->user->uid
));
2
Anil Bhattarai100

Puisque les questions title concernent l'appel de la fonction de comptage in a model, j'en ajouterai quelques-unes aux débutants qui lisent ceci :)

Une fonction dans un modèle pourrait ressembler à ceci:

/**
 * 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;
}
2
Brainfeeder

C'est comme le moyen le plus simple de le faire 

$ count = Table :: Model () -> count ("champ =: champ", array ("champ" => $ fildID)); ;__. echo $ count;

1
Jehan Wijesinghe

Cette méthode est fausse! Vous essayez d'obtenir en sélectionnant toutes les lignes de la base de données, vous chargez le serveur, mais c'est faux!

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

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

Ou vous pouvez créer une fonction dans votre modèle:

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

}

alors vous pouvez utiliser cette fonction comme ceci:

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

ou :

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

ou :

$model = new User;
$totalItems = $model->totalItems;
1
Macedonian