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.