Yii - Generador de consultas
El generador de consultas le permite crear consultas SQL de forma programática. El generador de consultas le ayuda a escribir código relacionado con SQL más legible.
Para utilizar el generador de consultas, debe seguir estos pasos:
- Construya un objeto yii \ db \ Query.
- Ejecuta un método de consulta.
Para construir un yii\db\Query , debe llamar a diferentes funciones del generador de consultas para definir diferentes partes de una consulta SQL.
Step 1 - Para mostrar un uso típico del generador de consultas, modifique el actionTestDb método de esta manera.
public function actionTestDb() {
   //generates "SELECT id, name, email FROM user WHERE name = 'User10';"
   $user = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->where(['name' => 'User10'])
      ->one();
   var_dump($user);
}Step 2 - Ir a http://localhost:8080/index.php?r=site/test-db, verá el siguiente resultado.
 
                Donde () función
los where()La función define el fragmento DÓNDE de una consulta. Para especificar unWHERE condición, puede utilizar tres formatos.
- string format - 'nombre = Usuario10' 
- hash format - ['nombre' => 'Usuario10', 'email => [email protected]'] 
- operator format - ['me gusta', 'nombre', 'Usuario'] 
Ejemplo de formato de cadena
public function actionTestDb() {
   $user = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->where('name = :name', [':name' => 'User11'])
      ->one();
   var_dump($user);
}Lo siguiente será la salida.
 
                Ejemplo de formato hash
public function actionTestDb() {
   $user = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->where([
         'name' => 'User5',
         'email' => '[email protected]'
      ])
      ->one();
   var_dump($user);
}Lo siguiente será la salida.
 
                El formato de operador le permite definir condiciones arbitrarias en el siguiente formato:
[operator, operand1, operand2]El operador puede ser:
- and - ['and', 'id = 1', 'id = 2'] generará id = 1 AND id = 2 o: similar al operador and 
- between - ['between', 'id', 1, 15] generará id BETWEEN 1 AND 15 
- not between - similar al operador between, pero BETWEEN se reemplaza por NOT BETWEEN 
- in - ['in', 'id', [5,10,15]] generará id IN (5,10,15) 
- not in - similar al operador in, pero IN se reemplaza por NOT IN 
- like - ['me gusta', 'nombre', 'usuario'] generará el nombre LIKE '% usuario%' 
- or like - similar al operador like, pero OR se usa para dividir los predicados LIKE 
- not like - similar al operador like, pero LIKE se reemplaza por NOT LIKE 
- or not like - similar al operador no como, pero OR se usa para concatenar los predicados NO COMO 
- exists - requiere un operando que debe ser una instancia de la clase yii \ db \ Query 
- not exists - similar al operador existe, pero crea una expresión NOT EXISTS (subconsulta) 
- <, <=, >, >=, o cualquier otro operador de base de datos: ['<', 'id', 10] generará id <10 
Ejemplo de formato de operador
public function actionTestDb() {
   $users = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->where(['between', 'id', 5, 7])
      ->all();
   var_dump($users);
}Lo siguiente será la salida.
 
                Función OrderBy ()
los orderBy() La función define el fragmento ORDER BY.
Example -
public function actionTestDb() {
   $users = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->orderBy('name DESC')
      ->all();
   var_dump($users);
}Lo siguiente será la salida.
 
                Función groupBy ()
los groupBy() La función define el fragmento GROUP BY, mientras que la having() El método especifica el fragmento HAVING.
Example -
public function actionTestDb() {
   $users = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->groupBy('name')
      ->having('id < 5')
      ->all();
   var_dump($users);
}Lo siguiente será la salida.
 
                los limit() y offset() métodos define el LIMIT y OFFSET fragmentos.
Example -
public function actionTestDb() {
   $users = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->limit(5)
      ->offset(5)
      ->all();
   var_dump($users);
}Puede ver el siguiente resultado:
 
                los yii\db\Query La clase proporciona un conjunto de métodos para diferentes propósitos:
- all() - Devuelve una matriz de filas de pares nombre-valor. 
- one() - Devuelve la primera fila. 
- column() - Devuelve la primera columna. 
- scalar() - Devuelve un valor escalar de la primera fila y la primera columna del resultado. 
- exists() - Devuelve un valor que indica si la consulta contiene algún resultado. 
- count() Devuelve el resultado de una COUNT consulta 
- other aggregation query methods- Incluye suma ($ q), promedio ($ q), max ($ q), min ($ q). El parámetro $ q puede ser un nombre de columna o una expresión de base de datos.