yii2
Travailler avec des bases de données
Recherche…
Utilisation du générateur de requêtes Yii2
Yii2 fournit des moyens efficaces pour récupérer des données à partir de la base de données.Considérez un exemple d'une simple table d'employé contenant les champs emp_id, emp_name et emp_salary . Afin de récupérer les noms des employés et leurs salaires, nous utilisons la requête.
select emp_name,emp_salary from employee
Pour générer la requête ci-dessus dans Yii2, il y a beaucoup de méthodes. L'une des méthodes consiste à utiliser un objet yii \ db \ Quer y .
//creates a new \yii\db\Query() object
$query=new \yii\db\Query();
$rows=$query->select(['emp_name','emp_salary']) //specify required columns in an array
->from('employee') //specify table name
->all(); //returns an array of rows with each row being an associative array of name-value pairs.
Nous pouvons utiliser une boucle foreach pour parcourir chaque paire nom-valeur dans le tableau $ rows .
foreach ($rows as $row) {
echo "Employee Name: ".$row['emp_name'].",Employee Salary: ".$row['emp_salary']."<br>";
}
Cela va sortir
Nom de l'employé: Kiran, Salaire de l'employé: 25000
Nom de l'employé: Midhun, Salaire de l'employé: 50000
Nom de l'employé: Jishnu, Salaire de l'employé: 20000
Nom de l'employé: Ajith, Salaire de l'employé: 25000
Nom de l'employé: Akshay, Salaire de l'employé: 750000
Plus d'exemples
Supposons que nous devions trouver le nom des employés dont le salaire est égal à 25000. Nous pouvons écrire la requête en sql en tant que
select emp_name from employee where salary=25000
Dans Yii2, le code pour générer la requête ci-dessus
$query=new \yii\db\Query();
$rows=$query->select(['emp_name'])
->from('employee')
->where(['emp_salary'=>25000]) //specify the condition as an associative array where key is column name
->all();
Si nous devons trouver des noms d'employés dont le salaire est supérieur à 25 000, nous pouvons écrire le code dans Yii2 comme
$rows=$query->select(['emp_name'])
->from('employee')
->where(['>','emp_salary', 25000])
//Here first element in the above array specify relational operator used, second element specify the table name and third the value itself.
->all();
Plus de vérification des conditions en utilisant where ()
Plusieurs conditions peuvent être écrites en utilisant la méthode where () comme indiqué ci-dessous.
// Creates a new \yii\db\Query() object
$query = new \yii\db\Query();
$rows = $query->select(['emp_name','emp_salary'])
->from('employee')
->where(['emp_name' => 'Kiran', 'emp_salary' => 25000]) // Specify multiple conditions
->one(); // Returns the first row of the result
Le code ci-dessus ira chercher un employé portant le nom kiran et le salaire 25000 . Si plusieurs employés satisfont à la condition ci-dessus, l'appel one () garantit que seul le premier résultat est extrait. Pour récupérer tous les résultats, vous devez utiliser all () .
Notez que si vous utilisez all (), le résultat sera toujours un tableau; Même s'il n'y a qu'un seul résultat ou zéro. Ce tableau contient tous les résultats sous forme de tableaux ou est vide lorsque aucun enregistrement ne correspond. L'appel one () renverra directement le tableau résultant ou false si la requête ne renvoie rien.
Le code équivalent en sql est donné ci-dessous.
select emp_name, emp_salary from employee where emp_name = 'Kiran' and emp_salary = 25000 limit 1;
Une autre manière d'écrire la requête ci-dessus dans Yii2 est donnée ci-dessous.
$rows = $query->select(['emp_name', 'emp_salary'])
->from('employee')
->where(['emp_name' => 'Kiran'])
->andWhere(['emp_salary' => 25000])
->one();
Un ensemble supplémentaire de conditions peut être spécifié en utilisant etWhere . Cela sera utile si nous avons besoin d'ajouter une vérification de condition supplémentaire à la requête ultérieurement.
Une autre manière de spécifier plusieurs conditions consiste à utiliser le format opérateur de la méthode where () . La requête ci-dessus peut également être écrite comme indiqué ci-dessous.
$rows = $query->select(['emp_name','emp_salary'])
->from('employee')
->where(['and', 'emp_name="kiran"', 'emp_salary=25000'])
->one();
Ici, nous spécifions l'opérateur ' et ' comme premier élément du tableau. De même, nous pouvons aussi utiliser « ou », « entre », « pas entre », « dans », « pas dans », « comme », « ou aimer », « ne pas aimer », « ou ne pas aimer », « exister » , ' n'existe pas ', ' > ', ' <= ' etc comme opérateurs.
Exemples d'utilisation de 'in' et 'like'
Supposons que nous devions trouver les employés ayant des salaires de 20000, 25000 et 50000 . En sql normal, nous écririons la requête comme
select * from employee where salary in (20000,25000,50000)
En Yii2, nous pouvons écrire ceci comme indiqué ci-dessous.
$rows = $query->from('employee')
->where(['emp_salary' => [20000,25000,50000]])
->all();
Une autre façon de spécifier la même condition est
$rows = $query->from('employee')
->where(['in', 'emp_salary', [20000,25000,50000]]) // Making use of operator format of where() method
->all();
De la même manière, « ne pas entrer» peut être spécifié à la place de « in » si nous voulons que tous les employés ne touchent pas les salaires 20000, 25000 et 50000.
Voyons maintenant quelques exemples d'utilisation de ' like ' dans la condition where (). Supposons que nous ayons besoin de trouver tous les employés ayant la chaîne « gopal » dans leur nom. Les noms peuvent être venugopal, rajagopal, gopalakrishnan etc. La requête sql est donnée ci-dessous.
select * from employee where emp_name like '%gopal%'
En Yii2, nous écrirons ceci comme
$rows = $query->from('employee')
->where(['like', 'emp_name', 'gopal']) // Making use of operator format of where() method
->all();
Si nous devons trouver tous les employés ayant la chaîne « gopal » et « nair » dans leur nom. Nous pouvons écrire comme
$rows = $query->from('employee')
->where(['like', 'emp_name', ['gopal','nair']]) // Making use of operator format of where() method
->all();
Cela évaluerait comme
sélectionnez * from employee où emp_name comme '% gopal%' et '% nair%'
De même, nous pouvons utiliser " pas comme " pour indiquer que tous les employés n'ont pas la chaîne " gopal " et " nair " dans leurs noms.
Utiliser orderBy ()
La méthode orderBy () spécifie le fragment ORDER BY d'une requête SQL. Prenons l'exemple de notre table employee contenant les champs emp_id, emp_first_name, emp_last_name et emp_salary . Nous devons commander le résultat en augmentant l'ordre des salaires des employés. sql comme indiqué ci-dessous.
Select * from employee order by emp_salary
En yii2, nous pouvons construire la requête comme indiqué ci-dessous
//creates a new \yii\db\Query() object
$query=new \yii\db\Query();
$rows= $query->from('employee')->orderBy([
'emp_salary' => SORT_ASC //specify sort order ASC for ascending DESC for descending
])->all();
Si nous devons commander les employés avec leur prénom dans l'ordre croissant et ensuite leurs salaires dans l'ordre décroissant, nous pouvons l'écrire en tant que simple sql comme suit.
Select * from employee order by emp_first_name ASC, emp_salary DESC
Le sql équivalent peut être construit en utilisant yii2 comme suit
//creates a new \yii\db\Query() object
$query=new \yii\db\Query();
$rows= $query->from('employee')->orderBy([
'emp_first_name' => SORT_ASC
'emp_salary' => SORT_DESC
])->all();
Vous pouvez également spécifier ORDER BY en utilisant une chaîne, comme vous le faites lors de l'écriture d'instructions SQL brutes. Par exemple, la requête ci-dessus peut également être générée comme indiqué ci-dessous.
//creates a new \yii\db\Query() object
$query=new \yii\db\Query();
$rows=$query->from('employee')->orderBy('emp_first_name ASC, emp_salary DESC')->all();
Vous pouvez appeler addOrderBy () pour ajouter des colonnes supplémentaires au fragment ORDER BY. Par exemple
//creates a new \yii\db\Query() object
$query=new \yii\db\Query();
$rows=$query->from('employee')->orderBy('emp_first_name ASC')
->addOrderBy('emp_salary DESC')->all();