Comment faire de l’ensemencement de base de données dans Laravel
Dans le passé, j’ai publié un article Comment amorcer une base de données en PHP à l’aide de Faker Library. Lors de mes recherches sur ce sujet, j’ai découvert que Laravel utilise également la même bibliothèque pour ensemencer la base de données. Comme j’ai écrit un article sur ce sujet pour PHP, j’ai décidé d’écrire également un article sur l’ensemencement de la base de données Laravel. En effet, Laravel utilise son propre processus pour amorcer la base de données.
Qu’est-ce que l’ensemencement de base de données ?
L’amorçage de la base de données signifie remplir vos tables de base de données avec les données de test par programmation. Avec cette approche, on peut entrer des milliers d’enregistrements dans la base de données en quelques minutes. C’est un moyen efficace plutôt que de le faire manuellement. Vous voudrez peut-être des données factices pour tester votre application et l’ensemencement de la base de données via le programme vous fera gagner beaucoup de temps.
Bibliothèque de faux
Faker est une bibliothèque open source qui génère de fausses données pour la base de données de votre application. En utilisant Faker, on peut insérer des milliers d’entrées dans la base de données en quelques minutes. Cette bibliothèque enregistre un travail de saisie de données ennuyeux pour les développeurs. Vous pouvez obtenir presque tous les types de données que vous souhaitez. La bibliothèque génère un faux e-mail, un nom, un numéro de téléphone portable, des mots, des phrases, des paragraphes, des nombres aléatoires, etc. Vous pouvez lire le type de données qu’ils fournissent sur la documentation.
Laravel installe cette bibliothèque en son cœur. Cela signifie que vous n’avez pas besoin de l’installer séparément. Cela étant dit, examinons comment effectuer l’amorçage de base de données dans Laravel.
Commencer
Pour commencer, je vais créer un tableau « clients » avec le nom des colonnes, l’e-mail et la biographie. Nous verrons le processus d’ensemencement de la table unique. De la même manière, les utilisateurs peuvent créer autant de tables qu’ils le souhaitent.
Créez une table de migration pour les clients à l’aide de la commande :
php artisan make:migration create_customers_table
Ouvrez le fichier de migration et ajoutez les colonnes à la méthode ‘up’ comme indiqué ci-dessous.
public function up()
{
Schema::create('customers', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email');
$table->text('bio');
$table->timestamps();
});
}
Exécutez la commande migrate qui créera une table « clients » dans votre base de données.
php artisan migrate
Ensuite, créez un modèle « Client » qui correspond à la table « clients ». À partir de Laravel 8.x, vos modèles seront créés dans le répertoire ‘App/Models’. Pour ce tutoriel, je suppose que vous utilisez Laravel 8.x. Dans l’ancienne version de Laravel, vous devez ajuster le chemin du modèle.
php artisan make:model Customer
Amorçage de base de données dans Laravel
L’amorçage d’une base de données dans Laravel vous oblige à suivre quelques étapes qui consistent à écrire des seeders, à créer une fabrique de modèles et à exécuter des seeders. Faisons-le un par un.
Écriture de semoirs
Si vous regardez le système de fichiers Laravel, vous remarquez le répertoire database/seeders
. Toutes les classes de graines iront dans ce répertoire. Une classe de départ a la run
méthode à partir de laquelle vous pouvez insérer les données dans la table.
Créez une classe de graines CustomerSeeder à l’aide de la commande :
php artisan make:seeder CustomerSeeder
Après avoir exécuté cette commande, vous devriez voir le CustomerSeeder.php
fichier créé sous database/seeders
. Ouvrez ce fichier et run
ajoutez le code ci-dessous à la fonction.
public function run()
{
AppModelsCustomer::factory()->count(50)->create()->each(function ($customer) {
$customer->save();
});
}
Ici, j’appelle l’usine Client que nous allons créer à l’étape suivante. Remarquez que j’ai passé la valeur 50 à la méthode ‘count’. Cela signifie que 50 lignes doivent être insérées dans la table « clients ». Ajustez cette valeur à votre guise.
Création d’usines
Le code que j’ai écrit CustomerSeeder
recherchera une usine pour obtenir les données de test. Cela signifie que nous devons créer une fabrique de modèles. Je vais donner un nom à l’usine en tant que CustomerFactory. Exécutez la commande pour générer la fabrique de modèles.
php artisan make:factory CustomerFactory --model=Customer
Cette commande créera un CustomerFactory.php
à l’intérieur du database/factories
répertoire. Ouvrez ce fichier et à la méthode de définition générez une donnée de test comme suit.
public function definition()
{
return [
'name' => $this->faker->name,
'email' => $this->faker->unique()->safeEmail,
'bio' => $this->faker->text,
];
}
Le tableau ci-dessus renvoie un nom, un e-mail et un texte choisis au hasard pour la biographie.
Semoirs en marche
Nous avons tous réglé avec le semoir et l’usine. Exécutez maintenant notre semoir à l’aide de la commande ci-dessous.
php artisan db:seed --class=CustomerSeeder
Vérifiez votre table « clients » et elle devrait contenir les 50 entrées fictives.
La commande ci-dessus exécute un seul semoir que nous avons passé explicitement. Supposons que vous souhaitiez créer plusieurs semoirs et les exécuter tous à l’aide d’une seule commande. Dans de tels cas, vous devez appeler vos seeders depuis le DatabaseSeeder
qui se trouve dans le même répertoire database/seeders
.
public function run()
{
$this->call(CustomerSeeder::class);
// call as many seeders you wish
}
L’utilisateur peut créer autant de semoirs selon ses besoins et les appeler à partir de cette run
méthode.
Enfin, exécutez les semoirs à l’aide de la commande ci-dessous.
php artisan db:seed
Il appellera tous les seeders de la run
méthode et l’exécutera.
J’espère que vous comprenez l’amorçage de base de données dans Laravel. J’aimerais entendre vos pensées et suggestions dans la section des commentaires ci-dessous.
Articles Liés
- Intégration de PayPal Payments Pro dans Laravel
- Créer un pot de miel pour lutter contre le spam de forme à Laravel
- Ajout de Google reCAPTCHA v3 à votre site Web Laravel