ダミーデータの生成

5333 ワード

実際のプロジェクト開発では、デバッガを容易にするために、データベースを埋め込むために偽のデータを使用することがよくあります.Laravelは、現代化された、非常に簡単で使いやすいデータ埋め込みスキームを提供しています.次に、Laravelが提供するデータの埋め込みを使用して、偽のユーザーを一括生成します.
ダミーデータの生成には、次の2つの段階があります.
  • 偽データを生成するモデル指定フィールドに値を付与-『モデルファクトリ』;
  • ロット生成偽データモデル-『データ充填』;

  • モデルプラント
    LaravelはデフォルトでFaker拡張パッケージを統合しており、この拡張パッケージを使用すると、偽のデータを簡単に生成できます.
    例は次のとおりです.
    //    factory       Faker\Generator   
    $faker = Faker\Factory::create();
    
    //      
    $faker->name; // "Janie Roob"
    
    //       
    $faker->safeEmail; // "[email protected]"
    
    //       
    $faker->date // "2011-02-10"
    
    //       
    $faker->time // "13:03:55"
    

    FakerとEloquentモデルファクトリを使用して、指定したモデルの各フィールドにランダム値を設定できます.
    本プロジェクトで生成したモデル工場は以下の通りである.
    database/factories/UserFactory.php
    define(App\Models\User::class, function (Faker $faker) {
        static $password;
    
        return [
            'name' => $faker->name,
            'email' => $faker->unique()->safeEmail,
            'password' => $password ?: $password = bcrypt('secret'),
            'remember_token' => str_random(10),
        ];
    });
    

    defineは指定したデータモデルを定義しますモデルファクトリ.defineメソッドは、2つのパラメータを受信します.1つ目のパラメータは、指定されたEloquentモデルクラスであり、2つ目のパラメータは、Faker PHP関数ライブラリのインスタンスを受信する閉包関数であり、関数内でFakerメソッドを使用して偽データを生成し、モデルの指定フィールドに値を割り当てることができます.
    生成したモデルファクトリファイルを修正し、以下のように修正します.
    database/factories/UserFactory.php
    define(App\Models\User::class, function (Faker $faker) {
        $date_time = $faker->date . ' ' . $faker->time;
        static $password;
    
        return [
            'name' => $faker->name,
            'email' => $faker->safeEmail,
            'password' => $password ?: $password = bcrypt('secret'),
            'remember_token' => str_random(10),
            'created_at' => $date_time,
            'updated_at' => $date_time,
        ];
    });
    

    ユーザーパスワードの暗号化操作を削除し、生成された偽の日付を使用してユーザーの作成時間と更新時間を割り当てます.
    データの移入
    LaravelではSeederクラスを使用して、データベースにテストデータを埋め込みます.すべてのSeederクラスのファイルはdatabase/seedsディレクトリの下にあり、ファイル名は『アルパカ式』に従って命名され、大文字と小文字の規範を厳格に遵守する必要があります.
    Laravelのデフォルトでは、callメソッドを使用して他のSeederクラスを実行し、データの入力順序を制御できるDatabaseSeederクラスを定義しています.次のコマンドを使用して、ユーザー関連の偽データを埋め込むためのUsersTable Seederファイルを生成できます.$ php artisan make:seeder UsersTableSeeder
    ユーザモデルファクトリを定義すると、生成されたユーザデータ埋め込みファイルでfactoryという補助関数を使用して偽データを使用するユーザオブジェクトを生成できます.
    この方法を使用して、50人の偽ユーザーを作成します.
    database/seeds/UsersTableSeeder.php
    times(50)->make();
            User::insert($users->makeVisible(['password', 'remember_token'])->toArray());
    
            $user = User::find(1);
            $user->name = 'Aufree';
            $user->email = '[email protected]';
            $user->password = bcrypt('password');
            $user->save();
        }
    }
    

    timesメソッドおよびmakeメソッドは、FactoryBuilderクラスによって提供されるAPIである.timesは、作成するモデルの数を指定するパラメータを受け入れ、makeメソッドが呼び出されるとモデルのセットが作成されます.makeVisibleメソッドは、Userモデルで指定した非表示属性$hiddenを一時的に表示し、次にinsertメソッドを使用して偽のユーザーリストを生成するデータをデータベースに一括挿入します.最後に、最初のユーザーの情報を更新し、後でこのアカウントを使用してログインするのを便利にしました.
    次に、DatabaseSeederでcallメソッドを呼び出して、偽のデータ埋め込みを実行するファイルを指定する必要があります.
    database/seeds/DatabaseSeeder.php
    call(UsersTableSeeder::class);
    
            Model::reguard();
        }
    }
    

    コマンドの実行
    上記の操作が完了すると、ユーザーのバッチ・偽データの生成を開始できます.偽データを生成するコマンドを実行する前に、migrate:refreshコマンドを使用してデータベースをリセットし、db:seedを使用してデータ埋め込みを実行する必要があります.
    $ php artisan migrate:refresh
    $ php artisan db:seed
    

    UserTable Seederデータベースのパディングファイルを個別に指定する場合は、次のことができます.
    $ php artisan migrate:refresh
    $ php artisan db:seed --class=UsersTableSeeder
    

    次のコマンドを使用して、データベースのリセットと塗りつぶしを同時に実行することもできます.$ php artisan migrate:refresh --seed