Подтвердить что ты не робот

Выполнение необработанных 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
");
4b9b3361

Ответ 1

Вы можете выполнить raw 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()-detail

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