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.