web-dev-qa-db-ja.com

Yii:モデル内のレコードをカウントする方法?

モデルからデータを取得する次のコードがあります。

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

次に、フェッチされた行の数をカウントします。 $notifyModel->count() workもcount($notifyModel)もありません。非常に簡単ですが、グーグルは役に立ちませんでした。

13
Gunah Gaar
$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
        ));
52
Willem Renzema

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 をご覧ください

29
Paul Gladkov

これを試して:

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

$notifyModel = Notification::model()->count(
           array('condition' => 'user_id=:userid', 
                 'params'=>array(':userid' => $userid)
                ));
4
Arfeen
$count = Notification::model()->countByAttributes(array(
    'user_id'=> Yii::app()->user->uid
));
3

質問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;
}
2
Brainfeeder

他の人よりもずっと速いと思う

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

簡単な方法:

$model = News::model()->findAll(); //returns AR objects
         $count = count($model);
2
trai bui

これが最も簡単な方法です。

$count = Table::Model()
         ->count("field=:field", array("field" => $fildID));
echo $count;
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;
1
Macedonian

SQLクエリでカウントを見つけることを強くお勧めします。そうしないと、システムのパフォーマンスが低下します。 Yii 1CActiveRecordのSQLクエリ自体でカウントを調べるには、次の3つの方法があります。

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

。countBySql()メソッド

指定されたSQLステートメントを使用して行数を検索します。これは、指定されたSQLステートメントとパラメーターでCDbCommand::queryScalarを呼び出すことと同等です。

例:

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

なぜなら、カウントを見つけるために2つの関数呼び出しがあるからです

0
MjM