Qu’est-ce qu’une factory
Pour les tests et le seeding, il faut insérer des enregistrements en base. Plutôt que d’indiquer manuellement chaque valeur, les factories de Laravel permettent de définir un jeu d’attributs par défaut pour chaque modèle Eloquent. Toute nouvelle application Laravel inclutdatabase/factories/UserFactory.php.
fake() donne accès à Faker pour générer diverses données aléatoires.
La locale de Faker se change via l’option
faker_locale de config/app.php.Créer une factory
Utilisez la commande Artisanmake:factory.
database/factories.
Détection automatique modèle / factory
Si votre modèle utilise le traitHasFactory, Laravel trouve automatiquement la factory correspondante.
Il cherche dans le namespace Database\Factories une classe nommée modèle + Factory.
Si le nommage diffère, spécifiez explicitement avec l’attribut UseFactory.
Définir une factory
Méthode definition()
Le cœur de la factory est la méthode definition(), qui retourne les attributs par défaut.
États de factory
Les méthodes d’état définissent des variantes.État soft delete
Pour les modèles à suppression logique, l’étattrashed() intégré est disponible.
Callbacks de factory
afterMaking et afterCreating permettent d’ajouter des traitements après la création du modèle.
Créer des modèles
make() — Sans sauvegarde
create() — Avec sauvegarde en base
Surcharge d’attributs
Un tableau passé àmake() ou create() surcharge des attributs précis.
state.
Lors d’une création via factory, la protection contre l’assignation en masse est désactivée automatiquement.
Sequence
Pour alterner des attributs lors de la génération, utilisezSequence.
sequence().
Factories et relations
Has Many (un à plusieurs)
has() crée un modèle avec une relation 1-N.
has + pluriel du nom de la relation).
Belongs To (relation inverse)
for() désigne le parent auquel appartient le modèle.
Many to Many
hasAttached() gère les relations N-N, avec attributs de table pivot.
Relations polymorphes
Utilisezhas() ou les méthodes magiques comme pour 1-N.
morphTo, la méthode magique n’est pas disponible : nommez explicitement la relation dans for().
Définir une relation dans la factory
Dansdefinition(), si vous affectez une factory à une clé étrangère, le parent est créé automatiquement.
recycle() — Réutiliser un modèle existant
Pour réutiliser la même instance sur plusieurs relations, utilisezrecycle().
Utilisation dans un seeder
Appelez la factory depuisDatabaseSeeder ou une autre classe de seeder.
Utilisation dans les tests
Dans un test, combinez avecRefreshDatabase.
RefreshDatabase réinitialise la base entre les tests, évitant les interférences.
Prochaines étapes
Seeding de base de données
Voyez comment combiner seeders et factories pour alimenter votre base.
Introduction aux tests
Découvrez la fonctionnalité de test de Laravel et le trait RefreshDatabase.