Выполнение необработанных SQL-запросов в Yii2?


Я написал следующие запросы, когда переносил свой PHP-сайт на платформу Yii2. Я хочу добавить их в свой контроллер, чтобы отобразить 10 лучших выигранных ставок. Я пробовал проходить через многие классы баз данных Yii2, но не могу заставить их работать.

Мои таблицы:

Пользователи:

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

Ставки:

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

Запросы, которые я хочу получить в Yii2, следующие:

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

Переменная start_date - это период в 6 месяцев, который я рассчитываю в соответствии с к time() Также обратите внимание, что balance_return - это каждый выигрыш, полученный пользователем, поэтому его сумма определяет рейтинг.

Второй запрос:

$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
");
Author: timclutton, 2015-05-06

1 answers

Вы можете выполнить необработанный sql следующим образом

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

Я рекомендую прочитать: http://www.yiiframework.com/doc-2.0/yii-db-connection.html#createCommand ()- подробно

Первым параметром является sql (с заполнителями), а вторая часть представляет собой массив значений, которые будут использоваться с заполнителями.

 62
Author: jagsler, 2016-12-30 09:31:24