Выполнение необработанных 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
");
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 (с заполнителями), а вторая часть представляет собой массив значений, которые будут использоваться с заполнителями.