Laravel Résumé
Models Migration Relation
Introduction Installation Projet:Structure Strucutre,model,migration Migration,Models,Relation Artisan CLI
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
Queue,job,task
TP:Schools Management
Authenfication:React
Layouts
Exercices





Factories

  1. Factories :

    • Rôle : Les usines sont utilisées pour définir la structure et les données de test pour les modèles de votre application. Elles fournissent un moyen de créer facilement des instances de modèles avec des données fictives.
    • Utilisation : Les usines sont principalement utilisées dans les tests automatisés (tests unitaires, tests fonctionnels, etc.) pour créer des données de test de manière dynamique. Elles peuvent également être utilisées manuellement pour générer des données de test dans le cadre du développement ou de la vérification du fonctionnement de votre application.
    • Différence clé : Les usines ne manipulent pas directement la base de données. Elles génèrent simplement des instances de modèles avec des données simulées, mais n'interagissent pas avec la base de données elle-même.
  2. Seeders :

    • Rôle : Les semoirs sont utilisés pour alimenter initialement la base de données avec des données prédéfinies. Ils sont souvent utilisés pour peupler la base de données avec des données statiques ou de référence nécessaires au fonctionnement de l'application.
    • Utilisation : Les semoirs sont généralement utilisés dans le processus de développement initial ou lors de la configuration de l'application pour fournir des données de base. Ils peuvent être utilisés pour insérer des données de référence telles que des rôles d'utilisateur, des paramètres de configuration, etc.
    • Différence clé : Contrairement aux usines, les semoirs interagissent directement avec la base de données pour insérer des données. Ils sont généralement utilisés pour insérer des enregistrements statiques qui ne changent pas fréquemment.

Exemple

Create Product Model:
<?php

namespace App\Models;

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

class Product extends Model
{
    use HasFactory;

    protected $fillable = [
        'name',
        'description',
        'price',
        'category_id',
    ];

    public function category()
    {
        return $this->belongsTo(Category::class);
    }
}
Create Category Model:
<?php

namespace App\Models;

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

class Category extends Model
{
    use HasFactory;

    protected $fillable = [
        'name',
        'description',
    ];

    public function products()
    {
        return $this->hasMany(Product::class);
    }
}
Create Migrations:
Category Migration:
php artisan make:migration create_categories_table --create=categories
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateCategoriesTable extends Migration
{
    public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->text('description')->nullable();
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('categories');
    }
}
Product Migration:
php artisan make:migration create_products_table --create=products
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateProductsTable extends Migration
{
    public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->text('description');
            $table->decimal('price', 10, 2);
            $table->unsignedBigInteger('category_id');
            $table->timestamps();

            $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
        });
    }

    public function down()
    {
        Schema::dropIfExists('products');
    }
}
Factories:
Category Factory:
<?php
namespace Database\Factories;

use App\Models\Category;
use Illuminate\Database\Eloquent\Factories\Factory;

class CategoryFactory extends Factory
{
    protected $model = Category::class;

    public function definition()
    {
        return [
            'name' => $this->faker->word,
            'description' => $this->faker->sentence,
        ];
    }
}
Product Factory:
<?php
namespace Database\Factories;

use App\Models\Product;
use Illuminate\Database\Eloquent\Factories\Factory;

class ProductFactory extends Factory
{
    protected $model = Product::class;

    public function definition()
    {
        return [
            'name' => $this->faker->name,
            'description' => $this->faker->paragraph,
            'price' => $this->faker->randomFloat(2, 10, 1000),
            'category_id' => function () {
                return \App\Models\Category::factory()->create()->id;
            },
        ];
    }
}
Create Seeders:
Category Seeder:
php artisan make:seeder CategorySeeder
Category Seeder (database/seeders/CategorySeeder.php):
<?php


namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\Category;

class CategorySeeder extends Seeder
{
    public function run()
    {
        Category::factory()->count(10)->create();
    }
}
Product Seeder:
php artisan make:seeder ProductSeeder
Define the logic in your seeders:
Product Seeder (database/seeders/ProductSeeder.php):
<?php
namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\Product;

class ProductSeeder extends Seeder
{
    public function run()
    {
        Product::factory()->count(50)->create();
    }
}
Run the Seeders:
After defining the seeders, you can run them using the db:seed Artisan command:

php artisan db:seed --class=CategorySeeder
php artisan db:seed --class=ProductSeeder