モデルからデータを取得する次のコードがあります。
_$notifyModel = Notification::model()->findByAttributes(array(
'user_id'=> Yii::app()->user->uid
));
_
次に、フェッチされた行の数をカウントします。 $notifyModel->count()
workも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
));
質問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();
簡単な方法:
$model = News::model()->findAll(); //returns AR objects
$count = count($model);
これが最も簡単な方法です。
$count = Table::Model()
->count("field=:field", array("field" => $fildID));
echo $count;
その方法は間違っています!データベースからすべての行を選択して取得しようとすると、サーバーをロードしますが、それは間違った方法です!あなたがする必要があるすべて:
$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;
SQLクエリでカウントを見つけることを強くお勧めします。そうしないと、システムのパフォーマンスが低下します。 Yii 1
CActiveRecord
の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つの関数呼び出しがあるからです