query guide framework español createcommand consultas app php mysql yii2 yii2-advanced-app

php - guide - yii2 sql server



¿Realizar consultas SQL sin formato en Yii2? (1)

He escrito las siguientes consultas cuando migro mi sitio web PHP al marco Yii2. Quiero agregarlos a mi controlador para mostrar las 10 mejores apuestas ganadas. He intentado pasar por muchas clases de base de datos Yii2 pero no puedo hacerlo funcionar.

Mis tablas son:

usuarios:

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

apuestas:

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

Las consultas que quiero obtener en Yii2 son:

$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 es un período de 6 meses que calculo según el time() También tenga en cuenta que balance_return es cada ganancia que obtiene un usuario, por lo que su suma determina la clasificación.

La segunda consulta es:

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


Puede ejecutar sql en bruto como este

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

Recomiendo leer: http://www.yiiframework.com/doc-2.0/yii-db-connection.html#createCommand()-detail

El primer parámetro es el sql (con marcador (s) de posición) y la segunda parte es una matriz de valores para usar con los marcadores de posición.