2014-11-10 4 views
6

я нашел это в руководстве, но имеют ни малейшего представления о том, как реализовать ту жеYii2 - не получить сумму столбца

yii\db\Query::count(); возвращает результат запроса COUNT. Другие аналогичные методы включают sum($q), average($q), max($q), min($q), которые поддерживают так называемый запрос агрегированных данных. $q параметр обязателен для этих методов и может быть либо именем столбца, либо выражением.

Скажем, например, у меня есть имя таблицы 'биллинг' со столбцами:

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

но страницы генерирует ошибку.

Спасибо.

ответ

16

Первая часть кода, который вы пытались, пытается использовать Query Builder. В этом случае, вы должны создать экземпляр запроса, установите целевой таблицы, а затем вычислить сумму:

Via Query Builder (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; 

Вторая часть кода, который вы пытались, пытается использовать объекты доступа к данным. В этом случае вы можете написать raw SQL для запроса базы данных, но для выполнения запроса необходимо использовать queryOne(), queryAll(), queryColumn() или queryScalar(). queryScalar() подходит для совокупного запроса, такого как этот. Доступ

Via Data Objects (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; 
+0

Спасибо так много. Он работает нормально. но в первом решении мне нужно отредактировать строку, как '$ sum = $ query-> sum ('amount');' это нормально?если я использую код, так как я получаю ошибку - ** Вызов функции-члена функции() для объекта без объекта ** – Joshi

+0

Рад, что он работает! Вы правы в имени переменной, я обновил сообщение. – Caleb

+0

greate !! thankx –

14

В модели сумма также может быть извлечена с:

$this->find()->where(...)->sum('column'); 
2

Ю. может непосредственно использовать Yii концепцию запроса в Поиск Модель

$this->find()->from('billing')->where(['column'=>value])->sum('amount'); 
+0

Как это может добавить функцию в модель поиска и может использоваться в сетке или где-то еще. public function getTotalamount() { return $ this-> find() -> from ('billing') -> где (['column' => value]) -> sum ('amount'); } –

+0

фактурирование - это название модели –

4

я надеюсь, что ваше имя модели Billing

внутри модели использования Billing

$this->find()->sum('amount'); 

в других моделях

Billing::find()->sum('amount'); 
Смежные вопросы