"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment générer facilement des données avec Database Seeders dans Laravel

Comment générer facilement des données avec Database Seeders dans Laravel

Publié le 2024-07-31
Parcourir:248

How to easily generate data with Database Seeders in Laravel

Lors de la création d'une application, qu'elle soit petite, moyenne ou grande. Avoir des données de test avec lesquelles jouer dans une application est inévitable et important.

Commençons donc du simple au avancé avec deux scénarios différents.

je. Toutes les applications ou la majorité des applications doivent avoir des utilisateurs. Parfois, nous souhaitons classer/étiqueter les utilisateurs comme Administrateur ou Utilisateurs réguliers. Générons donc un simple seeder avec 100 utilisateurs avec les spécifications du tableau ci-dessous :

  • ID, Prénom, Nom, Email, Mot de passe
  • Type d'utilisateur : soit un administrateur, soit un utilisateur standard

Alors c'est parti.

Pour insérer la table utilisateurs, bien sûr, vous auriez la table de migration des utilisateurs par défaut créée pour vous par Laravel.

Donc, pour les besoins de cette démonstration, la migration de votre table devrait ressembler à ceci :

public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->string('email');
            $table->string('password');
            $table->enum('user_type', ['user','admin'])->default('user');
            $table->rememberToken();
            $table->timestamps();
        });
    }

Pour créer une classe seeder pour notre table des utilisateurs.

php artisan make:seeder UserSeeder

Donc, pour créer des valeurs pour le seeder que nous venons de créer, nous devons utiliser le package Faker par défaut fourni avec chaque application Laravel.

Pour générer 100 utilisateurs à la fois, nous effectuons d'abord une boucle for et transmettons les fausses/pseudo données dans chaque colonne comme ceci :

use Faker\Factory as Faker;

public function run()
{
   $faker = Faker::create();

   for(i = 0; i  $faker->firstName(),
        'last_name' => $faker->lastName(),
        'email' => $faker->email(),
        'password' => bcrypt('hello1234'), // we might want to set this to a value we can easily remember for testing sake
        'user_type' => $faker->randomElement(['admin', 'user'])
      ]);
   }
}

Pour insérer cela dans la base de données, nous devons exécuter la commande ci-dessous :

php artisan db:seed --class=UserSeeder

Cela créera 100 utilisateurs et les insérera dans la base de données.

C'est aussi simple que cela.

Alors maintenant, vers une solution plus avancée.

Nous devons créer :

  • Un tableau des départements avec 10 nouveaux départements.
  • Nous allons créer 100 nouveaux utilisateurs.
  • Une table du personnel qui fera référence à la table des utilisateurs avec les mêmes détails et une colonne supplémentaire pour référencer la table des départements, c'est-à-dire Department_id.

Nous savons déjà à quoi ressemblera la table des utilisateurs, regardons à quoi ressembleront les tables du personnel et des départements.

Tableau du personnel

Schema::create('staff', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->string('email');
            $table->foreignId('department_id')->references('id')->on('departments');
            $table->foreignId('user_id')->references('id')->on('users');
            $table->timestamps();
        });

Tableau des départements :

Schema::create('departments', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });

Nous devons donc exécuter la migration pour avoir ces tables dans notre base de données.

Maintenant, pour la classe UserSeeder, nous devons implémenter les puces indiquées précédemment.

  • Une table de départements avec 10 nouveaux départements.
$now = now();
        $count = 0;
        $departmentNames = ['Electronics', 'Home & Garden', 'Toys & Games', 'Health & Beauty', 'Automotive', 'Sports & Outdoors','Clothing & Accessories',
            'Books', 'Music', 'Movies & TV', 'Grocery'
        ];

        for ($j=0; $j  $departmentNames[$j],
                'created_at' => $now,
                'updated_at' => $now,
            ]);
            $count  ;
        }

Les deux derniers points devront être mis en œuvre ensemble

  • Nous allons créer 100 nouveaux utilisateurs
  • Une table du personnel qui fera référence à la table des utilisateurs avec les mêmes détails et une colonne supplémentaire pour référencer la table des départements, c'est-à-dire Department_id.
if ($count == 10) { // we need to make sure we have all 10 departments
            $departments = Department::pluck('id')->toArray();

            for ($i=0; $i  $faker->firstName(),
                    'last_name' => $faker->lastName(),
                    'email' => $faker->email(),
                    'password' => bcrypt('hello1234'),
                    'user_type' => $faker->randomElement(['admin', 'user']),
                    'created_at' => $now,
                    'updated_at' => $now
                ]);

                Staff::create([
                    'first_name' => $user->first_name,
                    'last_name' => $user->last_name,
                    'email' => $user->email,
                    'user_id' => $user->id,
                    'department_id' => $faker->randomElement($departments), // pick random departments from DB
                    'created_at' => $now,
                    'updated_at' => $now
                ]);
            }
}

Explication:

  • Nous avons d'abord créé 10 départements.

  • Ensuite, nous mettons en place un compteur pour vérifier si les 10 départements ont été créés.

  • Si la condition du compteur est vraie, nous créons alors 100 utilisateurs.

  • Pour chacun de ces 100 utilisateurs, nous devons référencer leurs coordonnées dans un autre tableau appelé tableau du personnel.

  • Chaque personnel doit appartenir à un utilisateur et doit également appartenir à un département, donc pour ce faire, nous devons récupérer tous les départements que nous avons créés précédemment et les injecter aléatoirement dans la colonne Department_id.

L'implémentation complète de UserSeeder

        $now = now();
        $count = 0;
        $departmentNames = ['Electronics', 'Home & Garden', 'Toys & Games', 'Health & Beauty', 'Automotive', 'Sports & Outdoors','Clothing & Accessories',
            'Books', 'Music', 'Movies & TV', 'Grocery'
        ];

        for ($j=0; $j  $departmentNames[$j],
                'created_at' => $now,
                'updated_at' => $now,
            ]);
            $count  ;
        }

        $faker = Faker::create();
        if ($count == 10) {
            $departments = Department::pluck('id')->toArray();

            for ($i=0; $i  $faker->firstName(),
                    'last_name' => $faker->lastName(),
                    'email' => $faker->email(),
                    'password' => bcrypt('hello1234'),
                    'user_type' => $faker->randomElement(['admin', 'user']),
                    'created_at' => $now,
                    'updated_at' => $now
                ]);

                Staff::create([
                    'first_name' => $user->first_name,
                    'last_name' => $user->last_name,
                    'email' => $user->email,
                    'user_id' => $user->id,
                    'department_id' => $faker->randomElement($departments), // pick random departments from DB
                    'created_at' => $now,
                    'updated_at' => $now
                ]);
            }
        }

Puis exécutez :

php artisan make:seeder --class=UserSeeder

Si vous avez des questions, n'hésitez pas à le laisser tomber. Bon codage !

Déclaration de sortie Cet article est reproduit sur : https://dev.to/adetolaaremu/how-to-easily-generate-data-with-database-seeders-in-laravel-1kg6?1 En cas de violation, veuillez contacter study_golang@163 .com pour le supprimer
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3