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.
use App\Models\User;use Illuminate\Support\Facades\Hash;public function run(): void{ User::create([ 'name' => 'Administrateur', 'email' => '[email protected]', 'password' => Hash::make('password'), ]);}
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.
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.
use App\Models\User;use App\Models\Post;public function run(): void{ // Crée 10 utilisateurs User::factory(10)->create(); // Crée 3 publications pour chaque utilisateur User::factory(5) ->hasPosts(3) ->create();}
Pour l’usage détaillé des factories, consultez la documentation des factories Eloquent.
DatabaseSeeder est le point d’entrée qui orchestre plusieurs seeders. Utilisez call() pour spécifier ceux à exécuter.
<?phpnamespace Database\Seeders;use Illuminate\Database\Seeder;class DatabaseSeeder extends Seeder{ public function run(): void { $this->call([ UserSeeder::class, PostSeeder::class, CommentSeeder::class, ]); }}
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, users → posts).