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.