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.