Skip to main content

Qu’est-ce que le seeding

Le seeding est le mécanisme permettant d’insérer des données d’exemple ou des données initiales dans la base. Lors de la mise en place d’un environnement de développement ou de tests automatisés, il est nécessaire de disposer d’un état pré-rempli. Comme saisir manuellement les données à chaque fois est coûteux, on regroupe le processus dans des seeders réexécutables. Les classes de seeder sont stockées dans le répertoire database/seeders. Par défaut, une classe DatabaseSeeder est fournie.

Créer un seeder

Utilisez la commande Artisan make:seeder pour générer une nouvelle classe.
Le fichier généré est placé dans database/seeders/UserSeeder.php.

Implémenter le seeder

Écrivez la logique d’insertion dans la méthode run(). Vous pouvez utiliser la façade DB ou les modèles Eloquent.

Utiliser la façade DB

Utiliser les modèles Eloquent

Pendant l’exécution des seeders, la protection contre l’assignation en masse est automatiquement désactivée. Vous pouvez insérer des données sans vous soucier des réglages $fillable ou $guarded.

Combinaison avec les factories

Pour de grandes quantités de données de test, la combinaison avec les factories de modèles est pratique. Elles génèrent des données aléatoires en masse.
Pour l’usage détaillé des factories, consultez la documentation des factories Eloquent.

Utilisation de DatabaseSeeder

DatabaseSeeder est le point d’entrée qui orchestre plusieurs seeders. Utilisez call() pour spécifier ceux à exécuter.
Les seeders sont exécutés dans l’ordre passé à call(). En présence de contraintes de clé étrangère, seedez d’abord les tables référencées (par exemple, usersposts).

Exécuter les seeders

Exécuter tous les seeders

DatabaseSeeder est invoqué et exécute ensuite dans l’ordre les seeders passés à call().

Exécuter un seeder spécifique

L’option --class permet de spécifier la classe à exécuter.

Exécuter en même temps que les migrations

L’option --seed de migrate:fresh recrée toutes les tables puis exécute les seeders en une seule commande.
Pour n’exécuter qu’un seeder particulier, utilisez --seeder.
migrate:fresh supprime et recrée toutes les tables. Toutes les données existantes seront perdues ; ne l’utilisez donc pas en production.

Exécution en production

Lancer un seeding en production affiche une invite de confirmation. Pour l’exécuter sans confirmation, utilisez --force.
Un seeding en production peut écraser ou perdre des données. Faites toujours une sauvegarde avant d’exécuter.

Suppression des événements de modèle

Pour empêcher le déclenchement des événements de modèle (creating, created, etc.) pendant le seeding, utilisez le trait WithoutModelEvents.
Ce trait s’applique aussi aux seeders enfants appelés via call().

Exemple pratique : seeder d’une application de blog

Voici un exemple de mise en place de données initiales pour une application de blog avec utilisateurs et publications.
Commande d’exécution :

Prochaines étapes

Introduction à Eloquent

Apprenez à récupérer et manipuler les données insérées via l’ORM Eloquent.
Dernière modification le 13 juillet 2026