「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Laravel のデータベースシーダーを使用してデータを簡単に生成する方法

Laravel のデータベースシーダーを使用してデータを簡単に生成する方法

2024 年 7 月 31 日に公開
ブラウズ:950

How to easily generate data with Database Seeders in Laravel

アプリケーションを構築するときは、小規模、中規模、または大規模であっても構いません。アプリケーション内でテスト データを使用することは避けられず、重要です。

それでは、2 つの異なるシナリオを使って、簡単なものから高度なものまで始めてみましょう。

私。すべてのアプリケーションまたは大部分のアプリケーションにはユーザーが必要です。場合によっては、ユーザーを Admin または通常の Users として分類/タグ付けしたい場合があります。そこで、以下にリストされているテーブル仕様を使用して、100 人のユーザーを含む単純なシーダーを生成してみましょう:

  • ID、名、姓、メールアドレス、パスワード
  • ユーザー タイプ: 管理者 または通常の ユーザー

それでは、行きましょう。

users テーブルにシードするには、もちろん、Laravel によって作成されたデフォルトのユーザー移行テーブルが必要です。

このデモンストレーションのために、テーブルの移行は次のようになります:

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();
        });
    }

Users テーブルのシーダー クラスを作成します。

php artisan make:seeder UserSeeder

したがって、作成したばかりのシーダーの値を作成するには、すべての Laravel アプリケーションに付属するデフォルトの Faker パッケージを使用する必要があります。

一度に 100 人のユーザーを生成するには、まず for ループを実行し、次のように偽/疑似データを各列に渡します。

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'])
      ]);
   }
}

これをデータベースにシードするには、以下のコマンドを実行する必要があります:

php artisan db:seed --class=UserSeeder

これにより 100 人のユーザーが作成され、データベースに挿入されます。

それはとても簡単です

それでは、より高度なソリューションに進みます。

次を作成する必要があります:

  • 10 の新しい部門を含む部門テーブル。
  • 新しいユーザーを 100 人作成します。
  • 同じ詳細を持つ users テーブル を参照するスタッフ テーブルと、Departments テーブル (つまり、Department_id.
  • ) を参照する追加の列を参照します。

users テーブルがどのようになるかはすでにわかっています。スタッフ テーブルと部門テーブルがどのようになるかを見てみましょう。

スタッフテーブル

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();
        });

部門テーブル:

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

したがって、これらのテーブルをデータベースに含めるために移行を実行する必要があります。

次に、UserSeeder クラスについて、前に述べた箇条書きを実装します。

  • 10 の新しい部門を含む部門テーブル。
$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  ;
        }

最後の 2 つの箇条書きは一緒に実装する必要があります

  • 新しい 100 ユーザーを作成します
  • 同じ詳細を持つ users テーブル を参照するスタッフ テーブルと、Departments テーブル (つまり、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
                ]);
            }
}

説明:

  • 最初に 10 個の部門を作成しました。

  • 次に、10 部門すべてが作成されたかどうかを確認するカウンターを設定します。

  • カウンター条件が true の場合、100 人のユーザーが作成されます。

  • これら 100 人のユーザーごとに、スタッフ テーブルと呼ばれる別のテーブルで詳細を参照する必要があります。

  • 各スタッフはユーザーに属している必要があり、また部門にも属している必要があります。そのためには、前に作成したすべての部門を取得して、部門 ID 列にランダムに挿入する必要があります。

完全な 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
                ]);
            }
        }

次に実行します:

php artisan make:seeder --class=UserSeeder

ご質問がございましたら、お気軽にお問い合わせください。コーディングを楽しんでください!

リリースステートメント この記事は次の場所に転載されています: https://dev.to/adetolaaremu/how-to-easy-generate-data-with-database-seeders-in-laravel-1kg6?1 侵害がある場合は、study_golang@163 までご連絡ください。 .comを削除してください
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3