Laravel
Models Migration Relation
Introduction,istallation Strucutre,model,migration Migration,Models,Relation
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 CRUD: Etudiant CRUD: Car CRUD,Recherche: Book
Validation
Exemple :Projets
Api:Laravel +React
Middleware

Seeders & Factories

Authenfication
Layouts





Gestions Projet: Controllers

DeveloppeurController
<?php

namespace App\Http\Controllers;

use App\Models\Developpeur;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;

class DeveloppeurController extends Controller
{
    public function ajouterDeveloppeur()
    {
        return view("AjouterDeveloppeur");
    }
    public function enregistrerDeveloppeur(Request $request)
    {
        $validate = Validator::make($request->all(), [
            'nomDev' => 'required|max:25',
            'prenomDev' => 'required|max:25',
            'cv' => "required",
            'photoDev' => "required",
        ], [
            'nomDev.required' => 'le nom est obligatoire',
            'nomDev.max' => 'le nom ne doit pas dépasser 25 caracteres',
            'prenomDev.required' => 'le prenom est obligatoire',
            'prenomDev.max' => 'le prenom ne doit pas dépasser 25 caracteres',
            'cv.required' => 'le cv est obligatoire',
            'photoDev.required' => 'la photo est obligatoire',
        ]);
        if ($validate->fails()) {
            return back()->withErrors($validate->errors())->withInput();
        }

        if ($request->hasFile('photoDev')) {
            $file = $request->file('photoDev');
        } else {
            return back()->with('msg', 'Aucun fichier sélectionné.');
        }

        $extension = $file->getClientOriginalExtension();
        $taille = $file->getSize();
        $fileCv = $request->file('cv');
        $extensionCv = $fileCv->getClientOriginalExtension();
        $tailleCv = $fileCv->getSize();

        if ($extension != 'jpg' and $extension != 'png' and $extension != 'jpeg'  and $taille > 1000000 and $extensionCv != 'pdf' and $tailleCv > 1000000) {
            return back()->with('msg', ' image doit être jpg, png, jpeg, cv doit pdf et la taille des deux doit être < 10M');
        } else {
            $dossier = 'images';
            $n_unique = uniqid();
            $lienPhoto = $dossier . '/' . $n_unique . "_" . $file->getClientOriginalName();
            $file->move("images", $n_unique . "_" . $file->getClientOriginalName());

            $dossierCv = 'cv';
            $n_uniqueCv = uniqid();
            $lienCv = $dossierCv . '/' . $n_uniqueCv . "_" . $fileCv->getClientOriginalName();
            $fileCv->move("cv", $n_uniqueCv . "_" . $fileCv->getClientOriginalName());
        }
        $developpeur = $request->post();
        $developpeur['photoDev'] = $lienPhoto;
        $developpeur['cv'] = $lienCv;
        Developpeur::create($developpeur);
        return back()->with('msg', 'le developpeur est bien ajouté');
    }
	
	
	
    public function afficherDeveloppeur()
    {
        $developpeur = Developpeur::all();
        return view("AfficherDeveloppeur", compact("developpeur"));
    }
	
	
    public function modifierDeveloppeur($idDev)
    {
        $developpeur = Developpeur::find($idDev);
        return view("ModifierDeveloppeur", compact("developpeur"));
    }
	
	
    public function mettreAJourDeveloppeur(Request $request, $idDev)
    {
        $developpeur = Developpeur::find($idDev);
        $developpeur->update($request->all());
        return redirect()->route("AfficherDeveloppeur");
    }
	
	
    public function supprimerDeveloppeur($idDev)
    {
        $developpeur = Developpeur::find($idDev);
        $developpeur->delete();
        return redirect()->route("AfficherDeveloppeur");
    }
	
	
    public function rechercherParNomDev()
    {
        $developpeurs = Developpeur::all();
        return view("RechercheParNomDeveloppeur", compact("developpeurs"));
    }
	
	
    public function validerRechercherParNomDev(Request $request)
    {
        $nomDev = $request->input("nomDev");
        $developpeurs = Developpeur::all();
        $developpeurSelectionner = $developpeurs->where("nomDev", $nomDev)->first();
        return view("RechercheParNomDeveloppeur", compact("developpeurSelectionner", "developpeurs"));
    }
	
	
    public function afficherInfoDev()
    {
        $developpeurs = Developpeur::all();
        return view("AfficherInfoDev", compact("developpeurs"));
    }
	
	
    public function validerAfficherInfoDev(Request $request)
    {
        $idDev = $request->input("idDev");
        $nombreProjet = DB::select("SELECT COUNT(*) nbreP FROM projets p INNER JOIN taches t ON p.idP = t.idP WHERE t.idDev = '$idDev'")[0];
        $nombreTache = DB::select("SELECT COUNT(*) nbreT FROM taches WHERE idDev = '$idDev'")[0];
        $dureeTotale = DB::select("SELECT SUM(duree) dureeT FROM taches WHERE idDev ='$idDev'")[0];
        $dureeMoyenneParTache = DB::select("SELECT AVG(duree) as moyenneT FROM taches WHERE idDev = '$idDev'")[0];
        $dureeMoyenneParProjet = DB::select("SELECT AVG(duree) as moyenneP, p.nomP as nomP FROM taches t INNER JOIN projets p ON p.idP = t.idP WHERE idDev = '$idDev'  GROUP BY p.nomP")[0];
        $projetPlusChere = DB::select("SELECT MAX(coutHeure) as maxC, p.nomP as nomP FROM taches t INNER JOIN projets p ON p.idP = t.idP WHERE idDev = '$idDev' GROUP BY p.nomP")[0];
        $projetAvecDureeTotale = DB::select("SELECT SUM(duree) as dureeT, p.nomP as nomP FROM taches t INNER JOIN projets p ON p.idP = t.idP WHERE idDev = '$idDev' GROUP BY p.nomP");

        $developpeurs = Developpeur::all();
        return view("AfficherInfoDev", compact("nombreProjet", "nombreTache", "dureeTotale", "dureeMoyenneParTache", "dureeMoyenneParProjet", "projetPlusChere", "projetAvecDureeTotale","developpeurs"));
    }
}

ProjetController
<?php

namespace App\Http\Controllers;

use App\Models\Projet;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;

class ProjetController extends Controller
{
    public function ajouterProjet()
    {
        return view("AjouterProjet");
    }
    public function enregistrerProjet(Request $request)
    {
        $validate = Validator::make($request->all(), [
            "nomP"=> "required|max:25",
            "description"=>"required",
            "photoP"=>"required",
        ],[
            "nomP.required"=>"Le nom est obligatoire",
            "nomP.max"=>"Ne doit pas dépasser 25 caractères",
            "description.required"=>"La description est obligatoire"
        ]);

        if($validate->fails()){
            return back()->withErrors($validate->errors())->withInput();
        }

        $file = $request->file("photoP");
        if($file){
            $extension = $file->getClientOriginalExtension();
            $taille = $file->getSize();
            if($extension != "jpg" and $extension != "jpeg" and $extension != "png" and $taille > 1000000){
                return back()->with("msg", "taille".$taille."image doit être jpg, png ou jpeg et de taille < 10M");
            }else{
                $dossier = "images";
                $n_unique = uniqid();
                $lienPhoto = $dossier."/".$n_unique."_".$file->getClientOriginalName();

                $file->move("images", $n_unique."_".$file->getClientOriginalName());

                $projet = $request->post();
                $projet["photoP"]= $lienPhoto;

                Projet::create($projet);
                return back()->with("msg", "Le projet est bien ajouté");
            }
        }else{
            return back()->with("msg", "Aucun fichier sélectionné");
        }
        }
    public function afficherProjet()
    {
        $projet = Projet::all();
        return view("AfficherProjet", compact("projet"));
    }
    public function modifierProjet($idP)
    {
        $projet = Projet::find($idP);
        return view("ModifierProjet", compact("projet"));
    }
    public function mettreAjourProjet(Request $request, $idP)
    {
        $projet = Projet::find($idP);
        $projet->update($request->all());
        return redirect()->route("AfficherProjet");
    }
    public function supprimerProjet($idP)
    {
        $projet = Projet::find($idP);
        $projet->delete();
        return redirect()->route("AfficherProjet");
    }
    public function rechercherParNomProjet()
    {
        return view("RechercherParProjet");
    }
    public function validerRechercher(Request $request)
    {
        $nomP = $request->input("nomP");
        $projets = Projet::where("nomP", "like", "%" . $nomP . "%")->get();
        return view("RechercherParProjet", compact("projets"));
    }
    public function afficherProjetCout()
    {
        $projet = DB::select("SELECT p.nomP, SUM(t.coutHeure) AS totalCout FROM projets p INNER JOIN taches t ON t.idP = p.idP GROUP BY p.nomP ORDER BY t.coutHeure DESC");
        return view("AfficherProjetCout", compact("projet"));
    }
}

TacheController
<?php 

namespace App\Http\Controllers;

use App\Models\Developpeur;
use App\Models\Projet;
use App\Models\Tache;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class TacheController extends Controller
{
    public function ajouterTache()
    {
        $developpeur = Developpeur::all();
        $projet = Projet::all();
        return view("AjouterTache", compact('developpeur', 'projet'));
    }
    public function enregistrerTache(Request $request){
        $validate = Validator::make($request->all() , [
            'idP' => 'required',
            'idDev' =>'required',
            'duree' =>'required|integer',
            'coutHeure' => 'required',
            'etat' => 'required|max:200'
        ],[
            'idP.required' => 'Sélectionnez un projet',
            'idDev.required' => 'Sélectionnez un développeur',
            'duree.required' => 'La durée est obligatoire',
            'duree.integer' => 'La durée doit être un entier',
            'coutHeure.required' => 'Le coût heure est obligatoire',
            'etat.required' => 'L\'état est obligatoire',
        ]);

        if($validate->fails()){
            return back()->withErrors($validate->errors())->withInput();
        }
        $validatedData = $validate->validated();
        Tache::create($validatedData);
        return back()->with('msg','La tâche a bien été ajoutée');
    }
    public function afficherTache()
    {
        $tache = Tache::all();
        return view("AfficherTache", compact("tache"));
    }
    public function modifierTache($idT)
    {
        $tache = Tache::find($idT);
        $developpeur = Developpeur::all();
        $projet = Projet::all();
        return view("ModifierTache", compact('developpeur', 'projet', 'tache'));
    }
    public function mettreAjourTache(Request $request, $idT)
    {
        $tache = Tache::find($idT);
        $tache->update($request->all());
        return redirect()->route("AfficherTache");
    }
    public function supprimerTache($idT)
    {
        $tache = Tache::find($idT);
        $tache->delete();
        return redirect()->route("AfficherTache");
    }
    public function rechercherParTache()
    {
        $tache = Tache::all();
        return view("RechercherParTache", compact("tache"));
    }
    public function validerRechercherParTache(Request $request)
    {
        $idT = $request->input("idT");
        $tache = Tache::all();
        $tacheSelectionner = $tache->where("idT", $idT)->first();
        return view("RechercherParTache", compact("tache", "tacheSelectionner"));
    }
}