2014-11-10 10 views
6

Ho trovato questo nella guida, ma non hanno alcuna idea di come implementare la stessaYii2 - ottenendo somma di una colonna

yii\db\Query::count(); restituisce il risultato di una query COUNT. Altri metodi simili includono sum($q), average($q), max($q), min($q), che supportano la cosiddetta query di dati aggregati. Il parametro $q è obbligatorio per per questi metodi e può essere il nome o l'espressione della colonna.

diciamo per esempio ho un nome di tabella 'fatturazione' con colonne:

name  amount 
charge1 110.00 
charge2 510.00 
Total - 620.00 

Come implementare utilizzando

yii\db\Query::sum('amount'); 

Ho anche provato come

$command = Yii::$app->db->createCommand("SELECT sum(amount) FROM billing"); 

yii\db\Query::sum($command); 

ma pagina genera errore

Grazie.

risposta

16

Sembra che la prima parte del codice che hai provato stia tentando di utilizzare il Generatore di query. In questo caso, è necessario creare un'istanza di una query, impostare la tabella di destinazione, e quindi calcolare la somma:

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; 

La seconda parte sembra che il codice che hai provato stia tentando di utilizzare gli oggetti di accesso ai dati. In questo caso, è possibile scrivere SQL raw per interrogare il database, ma è necessario utilizzare queryOne(), queryAll(), queryColumn() o queryScalar() per eseguire la query. queryScalar() è appropriato per una query aggregata come questa. L'accesso

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

grazie mille. Funziona bene. ma nella prima soluzione devo modificare la riga come '$ sum = $ query-> sum ('amount');' ok?se uso il codice così com'è, sto ricevendo l'errore - ** Chiamata a una funzione membro sum() su un non oggetto ** – Joshi

+0

Contento che funzioni! Hai ragione sul nome della variabile, ho aggiornato il post. – Caleb

+0

greate !! thankx –

14

all'interno di un modello la somma potrebbe anche essere recuperati con:

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

Yu può utilizzare direttamente Yii concetto di query in Cerca Modello

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

Come questo può aggiungere funzione nel modello di ricerca e può essere utilizzato in griglia o altrove richiesto. funzione pubblica getTotalamount() { return $ this-> find() -> from ('billing') -> where (['column' => value]) -> sum ('amount'); } –

+0

fatturazione è il nome del modello –

4

Spero che il vostro nome del modello è di fatturazione

all'interno di fatturazione modello uso

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

in altri modelli

Billing::find()->sum('amount'); 
Problemi correlati