Ce nouveau tutoriel est l’occasion de continuer ma série sur les différentes fonctionnalités du framework Laravel que vous devez sûrement connaître si vous êtes arrivés ici. Cette fois, nous allons parler des seeds qui sont une fonctionnalité très intéressante dans le développement de logiciels. Oui, j’ai bien dit un seed que l’on peut traduire par graine. J’ai essayé d’en faire une représentation dans l’image qui illustre cet article. Une graine qui j’espère vous aidera à réaliser vos grands projets en PHP avec Laravel. Une chose est sûre, de mon côté, les seeds sont très utiles et je m’en sers souvent pour prototyper une application avec Laravel.
Commençons par le début. C’est quoi un seed dans Laravel ? Après avoir créé votre base de données avec les migrations et fait vos modèles pour gérer les relations entre les tables, il faut bien un point de départ pour avancer votre projet. C’est là qu’entrent en jeu cette fonctionnalité de seed que vous pourrez utiliser pour démarrer en conditions presque réelles votre projet sur Laravel en local. Avec les seeds vous allez pouvoir remplir votre base de données d’informations pour simuler l’utilisation réelle de votre application. Je vous conseille d’ailleurs de regarder ces deux tutoriels et éventuellement de chercher sur internet avant dans plus loin ici si ce n’est pas encore très clair pour vous.
Créer un seed sur Laravel
Maintenant, que l’on sait ce que c’est un seed dans Laravel on va pouvoir créer notre première graine pour alimenter notre base de données. Si vous n’avez pas encore regardé mon article sur la gestion de rôles dans Laravel, je vous conseille d’aller y faire un tour, car nous allons avoir besoin d’avoir une table d’utilisateur qui est en place. Bien évidemment, si vous avez déjà votre propre base de données avec ses tables en place il vous suffira d’adapter ce que vous allez voir dans ce tutoriel sur les seeds dans Laravel.
Pour créer votre premier seed sur Laravel, rien de plus simple avec la commande php artisan suivante :
php artisan make:seeder UsersTableSeeder
Cette commande va créer un nouveau fichier dans database/seeds. Comme vous vous en doutez, vu le nom, le but est d’ajouter un utilisateur fictif pour amorcer la base de données et tester par exemple notre frontend.
Remplir le seed avec des données
Pour le remplissage de votre seed, il faudra bien évidemment avoir des données cohérentes avec la structure de votre table sinon vous obtiendrez une erreur SQL lors de son exécution. Dans mon cas, j’ouvre le fichier seed qui se trouve ici database/seeds/UsersTableSeeder.php et j’ajoute le contenu suivant à l’intérieur :
<?php use App\User; use Illuminate\Database\Seeder; class UsersTableSeeder extends Seeder { public function run() { User::create([ 'name' => 'Zone Tuto', 'email' => 'bob@zonetuto.fr', 'password' => bcrypt('lasEcurit3!') ]); } }
Il s’agit ici d’un exemple très simple avec mon utilisateur fictif qui possède un nom, un email et un mot de passe. Vous pouvez aussi en ajouter plusieurs les uns à la suite des autres selon vos besoins.
Enregistrer le seed
Notre seed possède du contenu que l’on va pouvoir insérer dans la base de données, mais pour que ça fonctionne, il faut l’enregistrer correctement. Vos nouveaux seeds ne seront pas automatiquement exécutés lorsque vous utilisez la commande php artisan db:seed. Par défaut, cette commande exécute uniquement le DatabaseSeeder, qui est le seeder principal. Pour cela vous devez ouvrir le fichier : database/seeders/DatabaseSeeder.php et ajouter le contenu suivant à l’intérieur :
<?php namespace Database\Seeders; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { public function run(): void { $this->call([ UsersTableSeeder::class, // AutreTableSeeder::class, // EncoreUnAutreTableSeeder::class, ]); } }
Votre seed est à présent bien enregistré et référencé. Comme vous pouvez le voir, j’ai ajouté d’autres lignes d’exemple pour vos seeds suivant si vous en avez plusieurs. Il suffira de les référencer ici.
Exécuter les seeds
Étant donné que l’on a bien référencé notre seed au bon endroit et si vous en avez mis plusieurs à la suite dans database/seeders/DatabaseSeeder.php, vous pouvez tous les exécuter en une seule commande :
php artisan db:seed
Vos seeds se lanceront les uns à la suite des autres si aucune erreur ne se produit pendant leur exécution. Vous pouvez cependant les exécuter manuellement en cas de besoin en précisant celui que vous voulez lancer avec les commandes suivantes :
php artisan db:seed --class=UsersTableSeeder
php artisan db:seed --class=EncoreUnAutreTableSeeder
Dans certains cas, c’est utile plutôt que de tout relancer, cela dépend de ce que vous avez besoin de faire, mais tant que c’est possible, autant le savoir. En parlant d’exécution de seeds, il y a une autre fonctionnalité intéressante dans Laravel qui permet de réinitialiser votre base de données en relançant les migrations et en exécutant les seeds juste après. En une seule commande, vous avez votre base de données de test qui est à nouveau prête.
php artisan migrate:refresh --seed
Faites attention ne pas partager de secrets dans vos seeds qui pourraient se retrouver dans un commit et ensuite hébergés sur une forge publique tel que GitHub. Utilisez plutôt habilement le .env pour qui est normalement par défaut dans le gitignore quand vous téléchargez Laravel avec Git. Vous êtes maintenant prêt à utiliser les seeds qui sont une fonctionnalité très intéressante du framework Laravel !
Très bon tutoriel, j’aime bien la façon dont les seeds sont expliqués pour Laravel. J’ai toujours trouvé cette fonctionnalité un peu obscure, mais ton explication rend les choses plus claires. Je me demandais si tu aurais des conseils pour tester ces seeds dans différents environnements de développement ? Merci encore pour cet article!