Yii - Query Builder

Il generatore di query consente di creare query SQL in modo programmatico. Il generatore di query ti aiuta a scrivere codice relativo a SQL più leggibile.

Per utilizzare il generatore di query, segui questi passaggi:

  • Crea un oggetto yii \ db \ Query.
  • Esegui un metodo di query.

Per costruire un file yii\db\Query oggetto, è necessario chiamare diverse funzioni del generatore di query per definire parti diverse di una query SQL.

Step 1 - Per mostrare un utilizzo tipico del generatore di query, modificare il file actionTestDb metodo in questo modo.

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 - Vai a http://localhost:8080/index.php?r=site/test-db, vedrai il seguente output.

Funzione Where ()

Il where()la funzione definisce il frammento WHERE di una query. Per specificare un fileWHERE condizione, puoi utilizzare tre formati.

  • string format - "nome = Utente10"

  • hash format - ["name" => "User10", "email => [email protected]"]

  • operator format - ["mi piace", "nome", "Utente"]

Esempio di formato String

public function actionTestDb() {
   $user = (new \yii\db\Query()) ->select(['id', 'name', 'email']) ->from('user') ->where('name = :name', [':name' => 'User11']) ->one(); var_dump($user);
}

Di seguito sarà l'output.

Esempio di 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);
}

Di seguito sarà l'output.

Il formato operatore consente di definire condizioni arbitrarie nel seguente formato:

[operator, operand1, operand2]

L'operatore può essere:

  • and - ['and', 'id = 1', 'id = 2'] genererà id = 1 AND id = 2 o: simile all'operatore and

  • between - ['between', 'id', 1, 15] genererà l'id TRA 1 E 15

  • not between - simile all'operatore tra, ma BETWEEN viene sostituito con NOT BETWEEN

  • in - ['in', 'id', [5,10,15]] genererà id IN (5,10,15)

  • not in - simile all'operatore in, ma IN viene sostituito con NOT IN

  • like - ['like', 'name', 'user'] genererà il nome LIKE '% user%'

  • or like - simile all'operatore like, ma OR viene utilizzato per dividere i predicati LIKE

  • not like - simile all'operatore like, ma LIKE viene sostituito con NOT LIKE

  • or not like - simile all'operatore not like, ma OR viene utilizzato per concatenare i predicati NOT LIKE

  • exists - richiede un operando che deve essere un'istanza della classe yii \ db \ Query

  • not exists - simile all'operatore exist, ma crea un'espressione NOT EXISTS (sottoquery)

  • <, <=, >, >=, o qualsiasi altro operatore DB: ['<', 'id', 10] genererà id <10

Esempio di formato Operatore

public function actionTestDb() {
   $users = (new \yii\db\Query()) ->select(['id', 'name', 'email']) ->from('user') ->where(['between', 'id', 5, 7]) ->all(); var_dump($users);
}

Di seguito sarà l'output.

Funzione OrderBy ()

Il orderBy() la funzione definisce il frammento ORDER BY.

Example -

public function actionTestDb() {
   $users = (new \yii\db\Query()) ->select(['id', 'name', 'email']) ->from('user') ->orderBy('name DESC') ->all(); var_dump($users);
}

Di seguito sarà l'output.

Funzione groupBy ()

Il groupBy() la funzione definisce il frammento GROUP BY, mentre la funzione having() metodo specifica il frammento 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);
}

Di seguito sarà l'output.

Il limit() e offset() metodi definisce il LIMIT e OFFSET frammenti.

Example -

public function actionTestDb() {
   $users = (new \yii\db\Query()) ->select(['id', 'name', 'email']) ->from('user') ->limit(5) ->offset(5) ->all(); var_dump($users);
}

Puoi vedere il seguente output:

Il yii\db\Query class fornisce una serie di metodi per scopi diversi:

  • all() - Restituisce un array di righe di coppie nome-valore.

  • one() - Restituisce la prima riga.

  • column() - Restituisce la prima colonna.

  • scalar() - Restituisce un valore scalare dalla prima riga e dalla prima colonna del risultato.

  • exists() - Restituisce un valore che indica se la query contiene un risultato

  • count() Restituisce il risultato di una query COUNT

  • other aggregation query methods - Include somma ($q), average($q), max ($q), min($q). Il parametro $ q può essere un nome di colonna o un'espressione DB.