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





Book:CRUD

1. Model

Créer le modèle Book:
php artisan make:model Book
Modifier le modèle Book dans app/Models/Book.php :
// app/Models/Book.php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Book extends Model
{
    use HasFactory;

    protected $primaryKey = 'numero';
    protected $table = 'books'; 

    protected $fillable = ['numero', 'titre', 'genre', 'author', 'prix'];
}

2. Migration

Créer la migration pour le modèle Book:
php artisan make:migration create_books_table
Modifier la migration générée dans database/migrations/YYYY_MM_DD_create_books_table.php :
// database/migrations/YYYY_MM_DD_create_books_table.php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up()
    {
        Schema::create('books', function (Blueprint $table) {
            $table->bigIncrements('numero'); // Utiliser "numero" comme clé primaire
            $table->string('titre');
            $table->string('genre');
            $table->string('author');
            $table->float('prix');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('books');
    }
}
Exécuter la migration pour créer la table dans la base de données :
php artisan migrate

3. Controller

Créer le contrôleur BookController:
php artisan make:controller BookController
Modifier le fichier app/Http/Controllers/BookController.php :
// app/Http/Controllers/BookController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Book;

class BookController extends Controller
{
    public function ajouter(Request $request)
    {
        // Logique pour ajouter un livre
        Book::create($request->all());

        return redirect('/books');
    }

    public function supprimer($numero)
    {
        // Logique pour supprimer un livre
        Book::destroy($numero);

        return redirect('/books');
    }

    public function modifier($numero)
    {
        // Logique pour afficher le formulaire de modification
        $book = Book::findOrFail($numero);

        return view('ModifierBooks', compact('book'));
    }

    public function mettreAJour(Request $request, $numero)
    {
        // Logique pour mettre à jour un livre
        $book = Book::findOrFail($numero);
        $book->update($request->all());

        return redirect('/books');
    }

    public function detail($numero)
    {
        // Logique pour afficher les détails d'un livre
        $book = Book::findOrFail($numero);

        return view('DetailBook', compact('book'));
    }

    public function lister()
    {
        // Logique pour lister tous les livres
        $books = Book::all();

        return view('ListerBooks', compact('books'));
    }

    public function rechercherBooksParTitre(Request $request)
    {
        // Logique pour rechercher des livres par titre
        $titre = $request->input('titre');
        $books = Book::where('titre', 'like', '%' . $titre . '%')->get();

        return view('ListerBooks', compact('books'));
    }

    public function rechercherBooksParAuthor(Request $request)
    {
        // Logique pour rechercher des livres par auteur
        $author = $request->input('author');
        $books = Book::where('author', 'like', '%' . $author . '%')->get();

        return view('ListerBooks', compact('books'));
    }
}

4. Vues

layouts.app.blade.php :
Copy code
<!-- resources/views/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>Laravel Bookstore</title>
    <!-- Ajoutez ici vos liens CSS, scripts, etc. -->
</head>
<body>

    <header>
        <h1>Laravel Bookstore</h1>
        <nav>
            <ul>
                <li><a href="/books">Liste des livres</a></li>
                <li><a href="/books/ajouter">Ajouter un livre</a></li>
            </ul>
        </nav>
    </header>

    <main>
        @yield('content')
    </main>

    <footer>
        <!-- Ajoutez ici le contenu du pied de page -->
    </footer>

    <!-- Ajoutez ici vos scripts JS, etc. -->

</body>
</html>
ajouterBook.blade.php :
<!-- resources/views/ajouterBook.blade.php -->

@extends('layouts.app')

@section('content')
    <h2>Ajouter un livre</h2>
    <form action="/books/ajouter" method="post">
        @csrf
        <label for="titre">Titre :</label>
        <input type="text" name="titre" required><br>

        <label for="genre">Genre :</label>
        <input type="text" name="genre" required><br>

        <label for="author">Auteur :</label>
        <input type="text" name="author" required><br>

        <label for="prix">Prix :</label>
        <input type="text" name="prix" required><br>

        <button type="submit">Ajouter</button>
    </form>
@endsection
ListerBooks.blade.php :
<!-- resources/views/ListerBooks.blade.php -->

@extends('layouts.app')

@section('content')
    <h2>Liste des livres</h2>
    <ul>
        @foreach($books as $book)
            <li><a href="/books/{{ $book->numero }}">{{ $book->titre }}</a></li>
        @endforeach
    </ul>
@endsection
ModifierBooks.blade.php :
<!-- resources/views/ModifierBooks.blade.php -->

@extends('layouts.app')

@section('content')
    <h2>Modifier le livre</h2>
    <form action="/books/modifier/{{ $book->numero }}" method="post">
        @csrf
        <label for="titre">Titre :</label>
        <input type="text" name="titre" value="{{ $book->titre }}" required><br>

        <label for="genre">Genre :</label>
        <input type="text" name="genre" value="{{ $book->genre }}" required><br>

        <label for="author">Auteur :</label>
        <input type="text" name="author" value="{{ $book->author }}" required><br>

        <label for="prix">Prix :</label>
        <input type="text" name="prix" value="{{ $book->prix }}" required><br>

        <button type="submit">Modifier</button>
    </form>
@endsection
DetailBook.blade.php :
<!-- resources/views/DetailBook.blade.php -->

@extends('layouts.app')

@section('content')
    <h2>Détails du livre</h2>
    <p>Titre : {{ $book->titre }}</p>
    <p>Genre : {{ $book->genre }}</p>
    <p>Auteur : {{ $book->author }}</p>
    <p>Prix : {{ $book->prix }}</p>
    <a href="/books">Retour à la liste</a>
@endsection
RechercherBooksParTitre.blade.php :
<!-- resources/views/RechercherBooksParTitre.blade.php -->

@extends('layouts.app')

@section('content')
    <h2>Rechercher des livres par titre</h2>
    <form action="/books/rechercher-par-titre" method="post">
        @csrf
        <label for="titre">Titre :</label>
        <input type="text" name="titre" required><br>

        <button type="submit">Rechercher</button>
    </form>

    <h3>Résultats de la recherche</h3>
    <ul>
        @foreach($books as $book)
            <li><a href="/books/{{ $book->numero }}">{{ $book->titre }}</a></li>
        @endforeach
    </ul>
@endsection
RechercherBooksParAuthor.blade.php :
<!-- resources/views/RechercherBooksParAuthor.blade.php -->

@extends('layouts.app')

@section('content')
    <h2>Rechercher des livres par auteur</h2>
    <form action="/books/rechercher-par-auteur" method="post">
        @csrf
        <label for="author">Auteur :</label>
        <input type="text" name="author" required><br>

        <button type="submit">Rechercher</button>
    </form>

    <h3>Résultats de la recherche</h3>
    <ul>
        @foreach($books as $book)
            <li><a href="/books/{{ $book->numero }}">{{ $book->titre }}</a></li>
        @endforeach
    </ul>
@endsection

5. Routes

Définir les routes dans le fichier routes/web.php :
// routes/web.php

use App\Http\Controllers\BookController;

Route::get('/books', [BookController::class, 'lister']);
Route::get('/books/{numero}', [BookController::class, 'detail']);
Route::get('/books/ajouter', function () {
    return view('ajouterBook');
});
Route::post('/books/ajouter', [BookController::class, 'ajouter']);
Route::get('/books/modifier/{numero}', [BookController::class, 'modifier']);
Route::post('/books/modifier/{numero}', [BookController::class, 'mettreAJour']);
Route::get('/books/supprimer/{numero}', [BookController::class, 'supprimer']);
Route::post('/books/rechercher-par-titre', [BookController::class, 'rechercherBooksParTitre']);
Route::post('/books/rechercher-par-auteur', [BookController::class, 'rechercherBooksParAuthor']);