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

WBOY
リリース: 2024-07-26 04:48:43
オリジナル
388 人が閲覧しました

How to easily generate data with Database Seeders in Laravel

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

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

私。すべてのアプリケーションまたは大部分のアプリケーションにはユーザーが必要です。場合によっては、ユーザーを 管理者 または通常の ユーザー として分類/タグ付けしたい場合があります。そこで、以下にリストされているテーブル仕様を使用して、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 <= 99; i++)
   {
      User::create([
        'first_name' => $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 テーブル を参照する Staff テーブルと、Departments テーブル (つまり、Department_id) を参照するための追加の列を参照します。

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

スタッフテーブル

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 <= 9; $j++){
            Department::create([
                'name' => $departmentNames[$j],
                'created_at' => $now,
                'updated_at' => $now,
            ]);
            $count++;
        }
ログイン後にコピー

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

  • 新しい 100 ユーザーを作成します
  • 同じ詳細で users テーブル を参照する Staff テーブルと、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 <= 99; $i++) {
                $user = User::create([
                    'first_name' => $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 人のユーザーごとに、staffs テーブルと呼ばれる別のテーブルで詳細を参照する必要があります。

  • 各スタッフはユーザーに属している必要があり、また部門にも属している必要があります。そのため、これを行うには、前に作成したすべての部門を取得して、部門 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 <= 9; $j++){
            Department::create([
                'name' => $departmentNames[$j],
                'created_at' => $now,
                'updated_at' => $now,
            ]);
            $count++;
        }

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

            for ($i=0; $i <= 99; $i++) {
                $user = User::create([
                    'first_name' => $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
ログイン後にコピー

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

以上がLaravel のデータベースシーダーを使用してデータを簡単に生成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート