Yii - Construtor de Consultas
O construtor de consultas permite que você crie consultas SQL de maneira programática. O construtor de consultas ajuda a escrever código relacionado a SQL mais legível.
Para usar o criador de consultas, você deve seguir estas etapas -
- Construa um objeto yii \ db \ Query.
- Execute um método de consulta.
Para construir um yii\db\Query objeto, você deve chamar diferentes funções do construtor de consulta para definir diferentes partes de uma consulta SQL.
Step 1 - Para mostrar um uso típico do construtor de consultas, modifique o actionTestDb método desta forma.
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 - Vá para http://localhost:8080/index.php?r=site/test-db, você verá a seguinte saída.
Função Where ()
o where()função define o fragmento WHERE de uma consulta. Para especificar umWHERE condição, você pode usar três formatos.
string format - 'nome = usuário10'
hash format - ['nome' => 'Usuário10', 'email => usuá[email protected]']
operator format - ['gosto', 'nome', 'usuário']
Exemplo de formato de string
public function actionTestDb() {
$user = (new \yii\db\Query()) ->select(['id', 'name', 'email']) ->from('user') ->where('name = :name', [':name' => 'User11']) ->one(); var_dump($user);
}
A seguir será a saída.
Exemplo 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);
}
A seguir será a saída.
O formato do operador permite que você defina condições arbitrárias no seguinte formato -
[operator, operand1, operand2]
O operador pode ser -
and - ['e', 'id = 1', 'id = 2'] irá gerar id = 1 AND id = 2 ou: semelhante ao operador e
between - ['entre', 'id', 1, 15] irá gerar id ENTRE 1 E 15
not between - semelhante ao operador between, mas BETWEEN é substituído por NOT BETWEEN
in - ['in', 'id', [5,10,15]] irá gerar id IN (5,10,15)
not in - semelhante ao operador in, mas IN é substituído por NOT IN
like - ['como', 'nome', 'usuário'] irá gerar o nome LIKE '% usuário%'
or like - semelhante ao operador like, mas OR é usado para dividir os predicados LIKE
not like - semelhante ao operador like, mas LIKE é substituído por NOT LIKE
or not like - semelhante ao operador not like, mas OR é usado para concatenar os predicados NOT LIKE
exists - requer um operando que deve ser uma instância da classe yii \ db \ Query
not exists - semelhante ao operador exists, mas cria uma expressão NOT EXISTS (subconsulta)
<, <=, >, >=, ou qualquer outro operador de banco de dados: ['<', 'id', 10] irá gerar id <10
Exemplo de formato do operador
public function actionTestDb() {
$users = (new \yii\db\Query()) ->select(['id', 'name', 'email']) ->from('user') ->where(['between', 'id', 5, 7]) ->all(); var_dump($users);
}
A seguir será a saída.
Função OrderBy ()
o orderBy() função define o 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);
}
A seguir será a saída.
Função groupBy ()
o groupBy() função define o fragmento GROUP BY, enquanto o having() método especifica o 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);
}
A seguir será a saída.
o limit() e offset() métodos define o LIMIT e 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);
}
Você pode ver a seguinte saída -
o yii\db\Query classe fornece um conjunto de métodos para diferentes fins -
all() - Retorna uma matriz de linhas de pares nome-valor.
one() - Retorna a primeira linha.
column() - Retorna a primeira coluna.
scalar() - Retorna um valor escalar da primeira linha e primeira coluna do resultado.
exists() - Retorna um valor que indica se a consulta contém algum resultado
count() Retorna o resultado de uma COUNT consulta
other aggregation query methods - Inclui soma ($q), average($q), max ($q), min($q). O parâmetro $ q pode ser um nome de coluna ou uma expressão de banco de dados.