1.Créer les models des tables : Camion , Chauffeur ,Permis, Livraison
2.Créer les migration des models
3.Créer les Controllers avec les méthodes
Ajouter,AfficherList,Supprimer ,modifier,mettreAjour pour les models suivant (2pts)
Camion,
Livraision
4.Créer les vues suivant pour le controller Livraision
Ajouter,
AfficherListeLivraison,
Modifier
Supprimer
5.Afficher pour chaque chauffeur la liste des ses camions
6.Afficher la listes des camions pour une ville de départ sélectionnée
7.Afficher des voyage d’une date données
8.Afficher le nombre de voyage pour chaque chauffeur
9.Afficher la liste des camions arrivés dans une ville sélectionnée
10.Afficher la liste des camions les plus utilisés
Models
Camion model
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Camion extends Model
{
protected $table = 'camions';
protected $primaryKey = 'matricule';
protected $timestemps = true;
protected $fillable = ['marque','photo'];
public function livraisons() {
return $this->hasMany(Livraison::class,'matricule','matricule');
}
use HasFactory;
}
Chauffeur model
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Chauffeur extends Model
{
protected $tabel = 'chauffeurs';
protected $primarykey = 'idCh';
protected $fillable = ['nom','prenom'];
protected $timestemps = true;
public function permis() {
return $this->hasMany(Permis::class,'idCh','idCh');
}
public function livraisons() {
return $this->hasMany(Livraison::class,'idCh','idCh');
}
use HasFactory;
}
Permis model
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Permis extends Model
{
protected $table = 'permis';
protected $primarykey = 'numero';
protected $fillable = ['type','dateExpiration','idCh'];
protected $timestemps = true;
use HasFactory;
}
Livraison model
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Livraison extends Model
{
protected $table = 'livraisons';
protected $primaryKey = 'idL';
protected $fillable = ['date','villeDepar','villeArivee','ArriveOuNon','idCh','matricule'];
public function chauffeur() {
return $this->belongsTo(Chauffeur::class,'idCh','idCh');
}
public function camion() {
return $this->belongsTo(Camion::class,'matricule','matricule');
}
use HasFactory;
}
Migrations
Camion mogration
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('camions', function (Blueprint $table) {
$table->id('matricule');
$table->string('marque');
$table->string('photo');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('camions');
}
};
Chauffeur mogration
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('chauffeurs', function (Blueprint $table) {
$table->id('idCh');
$table->string('nom');
$table->string('prenom');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('chauffeurs');
}
};
Permis mogration
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('permis', function (Blueprint $table) {
$table->id('numero');
$table->string('type');
$table->date('dateExpiration');
$table->unsignedBigInteger('idCh');
$table->timestamps();
$table->foreign('idCh')->references('idCh')->on('chauffeurs')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('permis');
}
};
Livraison mogration
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('livraisons', function (Blueprint $table) {
$table->id('idL');
$table->date('date');
$table->string('villeDepar');
$table->string('villeArivee');
$table->string('ArriveOuNon');
$table->unsignedBigInteger('idCh');
$table->unsignedBigInteger('matricule');
$table->foreign('idCh')->references('idCh')->on('chauffeurs')->onDelete('cascade');
$table->foreign('matricule')->references('matricule')->on('camions')->onDelete('cascade');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('livraisons');
}
};
Controlers
Camion Controler
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Camion;
use App\Models\Chauffeur;
use App\Models\Livraison;
use Illuminate\Support\Facades\DB;
class camionController extends Controller
{
public function ajouter() {
return view('gestionLivraison.ajouterCamion');
}
public function validerAjouter(Request $request) {
$image = $request->file('photo');
$type = $image->getClientOriginalExtension();
if($type != 'jpg' and $type != 'png' and $type != 'jpeg'){
return back()->with('imgError',"l'image doit etre jpg,png,jpeg ");
} else {
$numeroUnique = uniqid();
$image->move('images',$numeroUnique.'_'.$image->getClientOriginalName());
$camion = $request->post();
$camion['photo']="images/".$numeroUnique."_".$image->getClientOriginalName();
Camion::create($camion);
return back()->with('msg',"camion bien ajouté");
}
}
public function afficherListe() {
$listeCamion = Camion::all();
return view('gestionLivraison.listeCamion',compact('listeCamion'));
}
public function camionListeParChauffeur() {
$listeChauffeur = Chauffeur::all();
return view('gestionLivraison.listeCamionParChauffeur',compact('listeChauffeur'));
}
public function camionListeParVille() {
$listeCamion = Camion::all();
$listeville = DB::Select('SELECT DISTINCT(villeDepar) FROM livraisons');
return view('gestionLivraison.listeCamionParVille',compact('listeville','listeCamion'));
}
public function afficherCamionListeParVille(Request $request) {
$ville = $request->post('ville');
$listeCamion = DB::select('SELECT c.matricule , c.marque , c.photo FROM camions c
INNER JOIN livraisons l ON l.matricule = c.matricule
WHERE l.villeDepar = "' . $ville.'";');
$listeville = DB::Select('SELECT DISTINCT(villeDepar) FROM livraisons');
return view('gestionLivraison.listeCamionParVille',compact('listeville','listeCamion'));
}
public function camionListeParVilleArrive() {
$listeCamion = DB::select('SELECT c.matricule , c.marque , c.photo FROM camions c
INNER JOIN livraisons l ON l.matricule = c.matricule
WHERE l.ArriveOuNon = "oui" ');
$listeville = DB::Select('SELECT DISTINCT(villeDepar) FROM livraisons
WHERE ArriveOuNon = "oui" ');
return view('gestionLivraison.listeCamionParVilleArrive',compact('listeville','listeCamion'));
}
public function afficherCamionListeParVilleArrive(Request $request) {
$ville = $request->post('ville');
$listeCamion = DB::select('SELECT c.matricule , c.marque , c.photo FROM camions c
INNER JOIN livraisons l ON l.matricule = c.matricule
WHERE l.ArriveOuNon = "oui"
AND l.villeDepar = "' . $ville.'";');
$listeville = DB::Select('SELECT DISTINCT(villeDepar) FROM livraisons
WHERE ArriveOuNon = "oui" ');
return view('gestionLivraison.listeCamionParVille',compact('listeville','listeCamion'));
}
public function camionTop3() {
$listeCamion = DB::select('SELECT c.matricule , c.marque , c.photo , COUNT(*) AS nmbr FROM camions c
INNER JOIN livraisons l ON l.matricule = c.matricule
GROUP BY c.matricule , c.marque , c.photo
ORDER BY nmbr DESC
LIMIT 3 ');
return view('gestionLivraison.camionTop3',compact('listeCamion'));
}
public function modifier($id) {
$camion = Camion::find($id);
return view('gestionLivraison.modifierCamion',compact('camion'));
}
public function mettreAjour(Request $request,$id){
$camion = Camion::find($id);
$camion->update($request->all());
$listeCamion = Camion::all();
return view('gestionLivraison.listeCamion',compact('listeCamion'));
}
public function supprimer($id) {
$camion = Camion::find($id);
$camion->delete();
$listeCamion = Camion::all();
return redirect()->route('listeCamion');
}
}
Livraison Controler
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Livraison;
use App\Models\Chauffeur;
use App\Models\Camion;
use Illuminate\Support\Facades\DB;
class livraisonController extends Controller
{
public function ajouter() {
$listeChauff = Chauffeur::all();
$listeCamion = Camion::all();
return view('gestionLivraison.ajouterLivraison',compact('listeChauff','listeCamion'));
}
public function validerAjouter(Request $request) {
Livraison::create($request->all());
return back()->with('msg','livraison bien ajoutée');
}
public function afficherListe() {
$listeLivraison = Livraison::all();
return view('gestionLivraison.listeLivraison',compact('listeLivraison'));
}
public function modifier($id) {
$listeChauff = Chauffeur::all();
$listeCamion = Camion::all();
$livraison = Livraison::find($id);
return view('gestionLivraison.modifierLivraison',compact('listeChauff','listeCamion','livraison'));
}
public function mettreAjour(Request $request,$id){
$livraison = Livraison::find($id);
$livraison->update($request->all());
$listeLivraison = Livraison::all();
return view('gestionLivraison.listeLivraison',compact('listeLivraison'));
}
public function supprimer($id) {
$livraison = Livraison::find($id);
$livraison->delete();
$listeLivraison = Livraison::all();
return redirect()->route('listeLivraison');
}
public function listeParDate(Request $request) {
$date = $request->post('date');
$listeLivraison = Livraison::Where('date','=',$date)->get();
return view('gestionLivraison.listeLivraison',compact('listeLivraison'));
}
public function nmbrVoyageParChauffeur() {
$listeChauff = DB::select('SELECT COUNT(l.idL) as nombreVoyage , c.nom , c.prenom
FROM chauffeurs c
LEFT JOIN livraisons l ON l.idCh = c.idCh
GROUP BY c.nom , c.prenom');
return view('gestionLivraison.nombreVoyageParChauffeur',compact('listeChauff'));
}
}
Vues
Layouts app.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@yield('titre')</title>
<style>
nav {
background-color: #a2a2dc;
padding: 10px;
margin-bottom: 20px;
}
nav a {
color: #fff;
text-decoration: none;
margin-right: 10px;
font-family: Arial, sans-serif;
}
nav a:hover {
text-decoration: underline;
}
h1 {
color: #333;
font-family: Arial, sans-serif;
}
</style>
</head>
<body>
<nav>
<a href="/livraison/ajouter">+ Ajouter Livraison</a>
<a href="/livraison/liste">Liste Livraison</a>
<a href="/camion/listeParChauffeur">Camion Par chauffeur</a>
<a href="/camion/listeParVille">Camion Par Ville</a>
<a href="/camion/listeParVilleArrive">Camion Par Ville Arrive</a>
<a href="/livraison/nombreVoyage">Nombre Voyafe Par Chauffeur</a>
<a href="/camion/top3">Top 3 Camion utilisés</a>
</nav>
<h1>@yield('titre')</h1>
@yield('content')
</body>
</html>