ガイドでこれを見つけましたが、同じように実装する方法がわかりません
yii\db\Query::count();
は、COUNTクエリの結果を返します。他の同様のメソッドには、いわゆる集計データクエリをサポートするsum($q)
、average($q)
、max($q)
、min($q)
などがあります。 $q
パラメータはこれらのメソッドに必須であり、列名または式のいずれかになります。
たとえば、「billing」というテーブル名と列があるとします。
name amount
charge1 110.00
charge2 510.00
Total - 620.00
を使用して実装する方法
yii\db\Query::sum('amount');
私も試してみました
$command = Yii::$app->db->createCommand("SELECT sum(amount) FROM billing");
yii\db\Query::sum($command);
しかし、ページはエラーを生成します。
ありがとう。
試したコードの最初の部分は、クエリビルダーを使用しようとしているようです。この場合、クエリのインスタンスを作成し、ターゲットテーブルを設定して、合計を計算する必要があります。
クエリビルダー経由( http://www.yiiframework.com/doc-2.0/guide-db-query-builder.html ):
_$query = (new \yii\db\Query())->from('billing');
$sum = $query->sum('amount');
echo $sum;
_
試行したコードの2番目の部分は、データアクセスオブジェクトを使用しようとしているようです。この場合、生のSQLを記述してデータベースをクエリできますが、queryOne()
、queryAll()
、queryColumn()
、またはqueryScalar()
を使用して、クエリを実行します。 queryScalar()
は、このような集約クエリに適しています。
データアクセスオブジェクト経由( http://www.yiiframework.com/doc-2.0/guide-db-dao.html ):
_$command = Yii::$app->db->createCommand("SELECT sum(amount) FROM billing");
$sum = $command->queryScalar();
echo $sum;
_
モデル内では、合計は次のようにフェッチすることもできます。
$this->find()->where(...)->sum('column');
モデル名がBillingであることを願っています
内部課金モデルの使用
$this->find()->sum('amount');
他のモデル
Billing::find()->sum('amount');
検索モデルでyiiクエリの概念を直接使用できます
$this->find()->from('billing')->where(['column'=>value])->sum('amount');
OR
$this->find()->where(['column'=>value])->sum('amount');
モデル外(課金はモデル名)
Billing::find()->where(['column'=>value])->sum('amount');