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épertoiredatabase/seeders. Par défaut, une classe DatabaseSeeder est fournie.
Créer un seeder
Utilisez la commande Artisanmake:seeder pour générer une nouvelle classe.
database/seeders/UserSeeder.php.
Implémenter le seeder
Écrivez la logique d’insertion dans la méthoderun(). 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.Utilisation de DatabaseSeeder
DatabaseSeeder est le point d’entrée qui orchestre plusieurs seeders. Utilisez call() pour spécifier ceux à exécuter.
call(). En présence de contraintes de clé étrangère, seedez d’abord les tables référencées (par exemple, users → posts).
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.
--seeder.
Exécution en production
Lancer un seeding en production affiche une invite de confirmation. Pour l’exécuter sans confirmation, utilisez--force.
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.
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.Prochaines étapes
Introduction à Eloquent
Apprenez à récupérer et manipuler les données insérées via l’ORM Eloquent.