La classe DB dans Laravel offre plusieurs méthodes qui sont couramment utilisées pour interagir avec la base de données. Voici une liste des méthodes les plus utilisées :
select : Exécute une requête SELECT et retourne un tableau d'objets.
$resultats = DB::select('SELECT * FROM clients WHERE age > ?', [18]);
insert : Exécute une requête INSERT et retourne true ou false.
DB::insert('INSERT INTO clients (nom, prenom, age) VALUES (?, ?, ?)', ['Doe', 'John', 25]);
update : Exécute une requête UPDATE et retourne le nombre de lignes affectées.
$nombreLignesAffectees = DB::update('UPDATE clients SET age = ? WHERE nom = ?', [30, 'Doe']);
delete : Exécute une requête DELETE et retourne le nombre de lignes affectées.
$nombreLignesSupprimees = DB::delete('DELETE FROM clients WHERE age < ?', [21]);
statement : Exécute une requête SQL brute qui ne retourne pas de résultats.
DB::statement('ALTER TABLE clients ADD COLUMN date_de_naissance DATE');
transaction : Démarre une transaction de base de données.
DB::beginTransaction();
try {
// Exécuter des opérations de base de données
DB::commit();
} catch (\Exception $e) {
// Annuler la transaction en cas d'erreur
DB::rollback();
throw $e;
}
table : Commence une requête à partir d'une table spécifiée.
$clients = DB::table('clients')->get();
raw : Utilise une expression SQL brute dans les clauses de requête.
$clients = DB::table('clients')
->select(DB::raw('count(*) as nombre_clients, age'))
->groupBy('age')
->get();
join : Ajoute une clause JOIN à la requête.
$clients = DB::table('clients')
->join('ventes', 'clients.idclient', '=', 'ventes.idclient')
->select('clients.nom', 'ventes.quantite')
->get();
leftJoin, rightJoin : Ajoute des clauses LEFT JOIN ou RIGHT JOIN à la requête.
$clients = DB::table('clients')
->leftJoin('ventes', 'clients.idclient', '=', 'ventes.idclient')
->select('clients.nom', 'ventes.quantite')
->get();
get : Exécute la requête et retourne une collection d'objets.
$clients = DB::table('clients')->get();
first : Exécute la requête et retourne le premier résultat.
$premierClient = DB::table('clients')->where('age', '>', 18)->first();
pluck : Exécute la requête et retourne la valeur d'une colonne spécifiée.
$nomClient = DB::table('clients')->where('idclient', 1)->pluck('nom');
exists : Vérifie si des enregistrements existent pour la requête.
$clientExiste = DB::table('clients')->where('nom', 'Dupont')->exists();
doesntExist : Vérifie si aucun enregistrement n'existe pour la requête.
$aucunClient = DB::table('clients')->where('nom', 'Inexistant')->doesntExist();
count : Exécute la requête et retourne le nombre total d'enregistrements.
$nombreDeClients = DB::table('clients')->count();
max, min, avg, sum : Calcule les valeurs maximale, minimale, moyenne ou la somme d'une colonne.
$ageMaximum = DB::table('clients')->max('age');
$ageMinimum = DB::table('clients')->min('age');
$ageMoyen = DB::table('clients')->avg('age');
$totalVentes = DB::table('ventes')->sum('quantite');
groupBy : Groupe les résultats par une colonne spécifiée.
$ventesParClient = DB::table('ventes')
->groupBy('idclient')
->select('idclient', DB::raw('SUM(quantite) as total_ventes'))
->get();
orderBy : Trie les résultats par une colonne spécifiée.
$clientsTriés = DB::table('clients')->orderBy('nom', 'asc')->get();
distinct : Retourne uniquement les valeurs distinctes d'une colonne.
$agesDistincts = DB::table('clients')->distinct()->pluck('age');
whereDate, whereMonth, whereYear : Filtre les résultats par date, mois ou année.
$ventesEnJanvier = DB::table('ventes')->whereMonth('datevente', '=', 1)->get();
1. Jointure Interne (INNER JOIN)
$resultats = DB::select('
SELECT clients.nom, ventes.quantite
FROM clients
INNER JOIN ventes ON clients.idclient = ventes.idclient
WHERE clients.pays = "France"
');
// Afficher les résultats
foreach ($resultats as $resultat) {
echo $resultat->nom . ' - ' . $resultat->quantite . '
';
}
Cette requête sélectionne le nom des clients et la quantité de ventes pour ceux qui sont situés en France en utilisant une jointure interne entre les tables clients et ventes.
2. Jointure Gauche (LEFT JOIN)
$resultats = DB::select('
SELECT clients.nom, ventes.quantite
FROM clients
LEFT JOIN ventes ON clients.idclient = ventes.idclient
WHERE clients.pays = "France"
');
// Afficher les résultats
foreach ($resultats as $resultat) {
echo $resultat->nom . ' - ' . $resultat->quantite . '
';
}
Cette requête sélectionne le nom des clients et la quantité de ventes, y compris ceux qui n'ont pas de ventes, pour ceux qui sont situés en France en utilisant une jointure gauche entre les tables clients et ventes.
3. Jointure Droite (RIGHT JOIN)
$resultats = DB::select('
SELECT clients.nom, ventes.quantite
FROM clients
RIGHT JOIN ventes ON clients.idclient = ventes.idclient
WHERE clients.pays = "France"
');
// Afficher les résultats
foreach ($resultats as $resultat) {
echo $resultat->nom . ' - ' . $resultat->quantite . '
';
}
Cette requête sélectionne le nom des clients et la quantité de ventes, y compris ceux qui n'ont pas de clients, pour ceux qui sont situés en France en utilisant une jointure droite entre les tables clients et ventes.
4. Jointure Croisée (CROSS JOIN)
$resultats = DB::select('
SELECT clients.nom, produits.nom as nom_produit
FROM clients
CROSS JOIN produits
WHERE clients.pays = "France"
');
// Afficher les résultats
foreach ($resultats as $resultat) {
echo $resultat->nom . ' - ' . $resultat->nom_produit . '
';
}
Cette requête sélectionne le nom des clients et le nom des produits pour ceux qui sont situés en France en utilisant une jointure croisée entre les tables clients et produits.
5. Jointure Multiple
$resultats = DB::select('
SELECT clients.nom, ventes.quantite, produits.nom as nom_produit
FROM clients
INNER JOIN ventes ON clients.idclient = ventes.idclient
INNER JOIN produits ON ventes.idproduit = produits.idproduit
WHERE clients.pays = "France"
');
// Afficher les résultats
foreach ($resultats as $resultat) {
echo $resultat->nom . ' - ' . $resultat->quantite . ' - ' . $resultat->nom_produit . '
';
}
Cette requête sélectionne le nom des clients, la quantité de ventes et le nom des produits pour ceux qui sont situés en France en utilisant plusieurs jointures internes entre les tables clients, ventes, et produits.
6. Jointure avec des conditions
$resultats = DB::select('
SELECT clients.nom, ventes.quantite, produits.nom as nom_produit
FROM clients
INNER JOIN ventes ON clients.idclient = ventes.idclient
INNER JOIN produits ON ventes.idproduit = produits.idproduit
WHERE clients.pays = "France" AND ventes.datevente >= "2023-01-01"
');
// Afficher les résultats
foreach ($resultats as $resultat) {
echo $resultat->nom . ' - ' . $resultat->quantite . ' - ' . $resultat->nom_produit . '
';
}
7. Utilisation d'Alias pour les Tables
$resultats = DB::select('
SELECT c.nom, v.quantite, p.nom as nom_produit
FROM clients as c
INNER JOIN ventes as v ON c.idclient = v.idclient
INNER JOIN produits as p ON v.idproduit = p.idproduit
WHERE c.pays = "France"
');
// Afficher les résultats
foreach ($resultats as $resultat) {
echo $resultat->nom . ' - ' . $resultat->quantite . ' - ' . $resultat->nom_produit . '
';
}
Cette requête utilise des alias pour les tables (c pour clients, v pour ventes, p pour produits) afin de rendre le code plus lisible.
8. Jointure avec Agrégation (GROUP BY)
$resultats = DB::select('
SELECT clients.nom, COUNT(ventes.idvente) as nombre_ventes
FROM clients
LEFT JOIN ventes ON clients.idclient = ventes.idclient
WHERE clients.pays = "France"
GROUP BY clients.idclient, clients.nom
');
// Afficher les résultats
foreach ($resultats as $resultat) {
echo $resultat->nom . ' - ' . $resultat->nombre_ventes . ' ventes
';
}
Cette requête utilise une jointure gauche pour obtenir le nombre de ventes par client en France, avec une agrégation (COUNT) et une clause GROUP BY.
9. Jointure avec Condition de Jointure Dynamique
$conditionDeJointure = 'ventes.datevente >= "2023-01-01"';
$resultats = DB::select("
SELECT clients.nom, ventes.quantite, produits.nom as nom_produit
FROM clients
INNER JOIN ventes ON clients.idclient = ventes.idclient AND $conditionDeJointure
INNER JOIN produits ON ventes.idproduit = produits.idproduit
WHERE clients.pays = 'France'
");
// Afficher les résultats
foreach ($resultats as $resultat) {
echo $resultat->nom . ' - ' . $resultat->quantite . ' - ' . $resultat->nom_produit . '
';
}
Cette requête utilise une condition de jointure dynamique basée sur une variable ($conditionDeJointure), ce qui peut être utile pour des conditions qui peuvent changer dynamiquement.
10. Jointure avec Sous-requête
$resultats = DB::select('
SELECT clients.nom, ventes.quantite
FROM clients
INNER JOIN ventes ON clients.idclient = ventes.idclient
WHERE ventes.quantite > (SELECT AVG(quantite) FROM ventes)
');
// Afficher les résultats
foreach ($resultats as $resultat) {
echo $resultat->nom . ' - ' . $resultat->quantite . '
';
}
Cette requête utilise une sous-requête pour sélectionner les clients dont la quantité de vente est
supérieure à la moyenne de toutes les ventes