2015-05-06 12 views
25

Ho scritto le query seguenti durante la migrazione del mio sito Web PHP al framework Yii2. Voglio aggiungerli al mio controller in modo da visualizzare le 10 migliori scommesse vinte. Ho provato a passare attraverso molte classi di database Yii2 ma non riesco a farlo funzionare.Esecuzione di query SQL non elaborate in Yii2?

mie tabelle sono:

utenti:

id | user_name | user_status | ...other columns... 

scommesse:

id | user_id | date_time |...other columns...| balance_return 

Le query che voglio entrare in Yii2 sono:

$query_all = $dbh->query(" 
    SELECT SUM(bets.balance_return) AS total_win 
     , bets.user_id 
     , users.user_name 
     , users.user_status 
     FROM bets INNER JOIN users ON bets.user_id = users.id 
    WHERE users.user_status = 'verified' 
     AND bets.date_time > " . $start_date . " 
    GROUP BY bets.user_id 
    ORDER BY total_win DESC 
"); 

La variabile start_date è un periodo di 6 mesi che calcolo in base a time() Inoltre, per favore, annoti che balance_return è ogni vittoria che un utente ottiene così la sua somma determina la classifica.

La seconda domanda è:

$qwi = $dbh->query(" 
    SELECT SUM(bets.balance_return) AS total_win 
     , bets.user_id 
     , users.user_name 
     , users.user_status 
     FROM bets INNER JOIN users ON bets.user_id = users.id 
    WHERE users.user_status = 'verified' 
     AND bets.date_time > " . $start_date . " 
    GROUP BY bets.user_id 
    ORDER BY total_win DESC LIMIT 0,10 
"); 

risposta

51

è possibile eseguire SQL prime come questo

$connection = Yii::$app->getDb(); 
$command = $connection->createCommand(" 
    SELECT SUM(bets.balance_return) AS total_win 
    , bets.user_id 
    , users.user_name 
    , users.user_status 
    FROM bets INNER JOIN users ON bets.user_id = users.id 
    WHERE users.user_status = 'verified' 
    AND bets.date_time > :start_date 
    GROUP BY bets.user_id 
    ORDER BY total_win DESC", [':start_date' => '1970-01-01']); 

$result = $command->queryAll(); 

vi consiglio di leggere: http://www.yiiframework.com/doc-2.0/yii-db-connection.html#createCommand()-detail

Il primo parametro è l'SQL (con segnaposto (s)) e la seconda parte è una matrice di valori da utilizzare con i segnaposto.

+0

Grazie mille per aver risposto alla domanda. Sono riuscito a farlo funzionare dopo essere rimasto bloccato per due giorni. Inoltre volevo notare che quando chiamo '$ connection = Yii :: $ app-> getDb();' da un controller del modulo ho ricevuto un errore, ho dovuto chiamare '$ connection = \ Yii :: $ app-> getDb(); 'Perché dovrebbe essere? –

+2

L'errore è dovuto al namespace. Se vuoi usare 'Yii' senza la barra devi aggiungere' usa Yii; 'nella parte superiore della tua classe. – jagsler

+0

Come best practice prendo l'abitudine di fare '' '\ Yii :: $ app ...' '' ovunque io usi l'oggetto Yii in linea. –