Yii - Générateur de requêtes

Le générateur de requêtes vous permet de créer des requêtes SQL de manière programmatique. Le générateur de requêtes vous aide à écrire du code SQL plus lisible.

Pour utiliser le générateur de requêtes, vous devez suivre ces étapes -

  • Créez un objet yii \ db \ Query.
  • Exécutez une méthode de requête.

Pour construire un yii\db\Query objet, vous devez appeler différentes fonctions de générateur de requête pour définir différentes parties d'une requête SQL.

Step 1 - Pour afficher une utilisation typique du générateur de requêtes, modifiez le actionTestDb méthode de cette façon.

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 - Aller à http://localhost:8080/index.php?r=site/test-db, vous verrez la sortie suivante.

Fonction Where ()

le where()La fonction définit le fragment WHERE d'une requête. Pour spécifier unWHERE condition, vous pouvez utiliser trois formats.

  • string format - 'nom = Utilisateur10'

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

  • operator format - ["comme", "nom", "utilisateur"]

Exemple de format de chaîne

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

Voici la sortie.

Exemple de format de hachage

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

Voici la sortie.

Le format opérateur vous permet de définir des conditions arbitraires dans le format suivant -

[operator, operand1, operand2]

L'opérateur peut être -

  • and - ['and', 'id = 1', 'id = 2'] générera id = 1 AND id = 2 ou: similaire à l'opérateur and

  • between - ['between', 'id', 1, 15] générera un identifiant ENTRE 1 ET 15

  • not between - similaire à l'opérateur between, mais BETWEEN est remplacé par NOT BETWEEN

  • in - ['in', 'id', [5,10,15]] générera id IN (5,10,15)

  • not in - similaire à l'opérateur in, mais IN est remplacé par NOT IN

  • like - ['like', 'name', 'user'] générera le nom LIKE '% user%'

  • or like - similaire à l'opérateur like, mais OR est utilisé pour diviser les prédicats LIKE

  • not like - similaire à l'opérateur like, mais LIKE est remplacé par NOT LIKE

  • or not like - similaire à l'opérateur not like, mais OR est utilisé pour concaténer les prédicats NOT LIKE

  • exists - nécessite un opérande qui doit être une instance de la classe yii \ db \ Query

  • not exists - similaire à l'opérateur existe, mais construit une expression NOT EXISTS (sous-requête)

  • <, <=, >, >=, ou tout autre opérateur DB: ['<', 'id', 10] générera id <10

Exemple de format opérateur

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

Voici la sortie.

Fonction OrderBy ()

le orderBy() La fonction définit le fragment ORDER BY.

Example -

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

Voici la sortie.

Fonction groupBy ()

le groupBy() définit le fragment GROUP BY, tandis que la fonction having() method spécifie le fragment 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);
}

Voici la sortie.

le limit() et offset() méthodes définit le LIMIT et OFFSET fragments.

Example -

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

Vous pouvez voir la sortie suivante -

le yii\db\Query class fournit un ensemble de méthodes à des fins différentes -

  • all() - Renvoie un tableau de lignes de paires nom-valeur.

  • one() - Renvoie la première ligne.

  • column() - Renvoie la première colonne.

  • scalar() - Renvoie une valeur scalaire à partir de la première ligne et de la première colonne du résultat.

  • exists() - Renvoie une valeur indiquant si la requête contient un résultat

  • count() Renvoie le résultat d'une requête COUNT

  • other aggregation query methods- Comprend somme ($ q), moyenne ($ q), max ($ q), min ($ q). Le paramètre $ q peut être un nom de colonne ou une expression DB.