Laravel
Models Migration Relation
Introduction Installation Projet:Structure Strucutre,model,migration Migration,Models,Relation Artisan CLI Migrations:Exemples Models:Exemples Relations:Exemples 1 Relations:Exemples 2
Les Relations
BelongsTo HasOne HasMany BelongsToMany HasManyThrough
Exemples des Relations
Relations:oneToMany,ManyToMany... Relations:Exemples
Exercices
Exercice 1 Exercice 2
Controllers Views Routes
Routes,Controller,Model,view
Les Routes
Définir:Routes Routes avec Paramètres Routes nommées Groupes de routes
Les Controllers
Les Controllers Les Contrôleurs de Ressources
Les Vues
Vues et Blade Templates Blade Layouts et Sections Sous-vues Composants et Slots Contrôles de flux
MVC :CRUD
CRUD: Produit CRUD: Etudiant CRUD: Car CRUD,Recherche: Book
Validation
Exemple :Projets
ORM:Eloquent
Exemple :Transport
Api:Laravel +React
Middleware

Seeders & Factories
Exemples :EFM

Authenfication
TP:Schools Management
Authenfication:React
Layouts
Exercices





Eloquent: DB::

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