Ne perdez plus de temps à remplir vos formulaires manuellement pour tester votre application ! Grâce à la bibliothèque FakerPHP et au puissant système de Factories de Laravel, générez des milliers de jeux de données réalistes en une ligne de commande.
Générez des données humaines et cohérentes : faux emails uniques, noms, adresses, prix décimaux, phrases et paragraphes.
Définissez des variantes modulaires en une méthode : User::factory()->admin()->create() ou Product::factory()->promo()->create().
Liez automatiquement parents et enfants : Category::factory()->has(Product::factory()->count(5))->create().
Orchestrez l'ordre d'insertion de toute votre base avec la commande magique php artisan migrate:fresh --seed.
// 1. database/factories/ProductFactory.php
namespace DatabaseFactories;
use AppModelsCategory;
use IlluminateDatabaseEloquentFactoriesFactory;
use IlluminateSupportStr;
class ProductFactory extends Factory
{
public function definition(): array
{
$nom = fake()->unique()->words(3, true);
return [
'name' => ucfirst($nom),
'slug' => Str::slug($nom),
'description' => fake()->paragraph(2),
'price' => fake()->randomFloat(2, 10, 499), // Prix entre 10 et 499 €
'stock' => fake()->numberBetween(0, 100),
'is_active' => fake()->boolean(85), // 85% de chance d'être actif
// Lie automatiquement une catégorie ou en génère une nouvelle
'category_id' => Category::factory(),
];
}
// Factory State pour générer des produits en solde
public function enPromotion(): static
{
return $this->state(fn (array $attributes) => [
'price' => 19.99,
'is_active' => true,
]);
}
}
// 2. database/seeders/DatabaseSeeder.php
namespace DatabaseSeeders;
use AppModelsUser;
use AppModelsCategory;
use AppModelsProduct;
use IlluminateDatabaseSeeder;
class DatabaseSeeder extends Seeder
{
public function run(): void
{
// Créer un administrateur fixe pour se connecter en développement
User::factory()->create([
'name' => 'Admin Test',
'email' => 'admin@learnweb.test',
]);
// Créer 5 catégories, chacune contenant entre 6 et 10 produits
Category::factory()
->count(5)
->has(Product::factory()->count(8))
->create();
}
}Configurez votre commande de génération et lancez la simulation pour observer les données aléatoires créées instantanément par la Factory.
| ID | Nom Produit (Faker::words) | Catégorie (Relation) | Prix (decimal:2) | Stock | Statut |
|---|---|---|---|---|---|
| #101 | Casque Audio Bluetooth Pro slug: casque-audio-bluetooth-pro | Audio & Vidéo | 89.90 € | 14 en stock | Actif |
| #102 | Clavier Mécanique RGB Sans Fil slug: clavier-mecanique-rgb-sans-fil | Périphériques | 119.50 € | 6 en stock | Actif |
| #103 | Écran Gaming 4K Ultra HD slug: ecran-gaming-4k-ultra-hd | Informatique | 349.00 € | 2 en stock | Actif |
| #104 | Souris Ergonomique Haute Précision slug: souris-ergonomique-haute-precision | Périphériques | 49.99 € | 25 en stock | Actif |
| #105 | Hub USB-C 8 en 1 Aluminium slug: hub-usb-c-8-en-1-aluminium | Accessoires | 39.90 € | Rupture | Brouillon |
Ne mélangez pas vos données indispensables (rôles d'utilisateurs, pays, taxes) et les fausses données de test.
Créez des seeders dédiés : RoleSeeder.php que vous pouvez exécuter sans risque en production avec php artisan db:seed --class=RoleSeeder.
Le REPL interactif de Laravel permet d'expérimenter vos factories directement dans votre console :
> User::factory()->count(3)->make(); // Génère les objets sans écrire en BDD
> Product::count(); // Renvoie le nombre total de produits