web-dev-qa-db-fra.com

Effectuer des requêtes SQL brutes dans Yii2?

J'ai écrit les requêtes ci-dessous lors de la migration de mon site Web PHP vers le framework Yii2. Je souhaite les ajouter à mon contrôleur afin d'afficher les 10 meilleurs paris gagnés. J'ai essayé de passer par de nombreux Yii2 classes de base de données, mais je ne peux pas le faire fonctionner.

Mes tables sont:

tilisateurs:

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

paris:

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

Les requêtes que je veux obtenir dans Yii2 sont:

$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 variable start_date est une période de 6 mois que je calcule en fonction de time() Veuillez également noter que balance_return Est chaque victoire qu'un utilisateur a obtenue de sorte que sa somme détermine le classement.

La deuxième requête est:

$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
");
31
Lenny Carmi

Vous pouvez exécuter sql brut comme ceci

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

Je recommande de lire: http://www.yiiframework.com/doc-2.0/yii-db-connection.html#createCommand () -detail

Le premier paramètre est le sql (avec un ou plusieurs espaces réservés) et la seconde partie est un tableau de valeurs à utiliser avec les espaces réservés.

73
jagsler