タグ: Factory

  • 【Laravel】Factoryで例外を作るやつ

    【Laravel】Factoryで例外を作るやつ

    Laravelで一部、こっちが指定した情報でデータを作成してほしいことがあったので、Factoryに例外を作成する方法をご紹介します。

    今回は「メール確認が終了していないユーザーを作成する」という趣旨で作成します。

    Factoryを修正

    Factoryファイルのdefinitionメソッドを普通に埋めた後に、新しくメソッドを作成しましょう。

    名前は分かり易ければなんでもOKです👍

    public function email_not_verified()
    {
        return $this->state(function (array $attributes) {
            return [
                'email_verified_at' => null
            ];
        });
    }

    例外のFactoryを実行

    作成した例外のFactoryを実行しましょう。

    通常のFactoryは以下のコマンドでSeederから実行します。

    // 複数個作成するときはnのその数を入力する(1個のときは空でOK)。
    User::factory(n)->create();

    これを先ほど作成した例外バージョンで実行する方法は以下です。

    User::factory()->email_not_verified()->create();

    factoryメソッドを呼んで、createメソッドで実際に作成する前に、例外のメソッド(今回で言うとemail_not_verifiedメソッド)を間に噛ませてあげるとその例外が作成できます👍

    上記を書いたあとはSeederを実行してください。(下記の例だとDBのレコードは全部リセットされます)

    php artisan migrate:refresh --seeder

    通常も例外も両方作成する

    必ずしもどちらか一方しか実行できないわけではなくて、もちろん両方とも同時に実行できます。

    何を言っているかと言うのは、以下のコードを見たら分かると思います。

    <?php
    
    namespace Database\Seeders;
    use App\Models\User;
    use Illuminate\Database\Seeder;
    
    class UserSeeder extends Seeder
    {
        /**
         * Run the database seeds.
         *
         * @return void
        */
        public function run()
        {
            User::factory(10)->create();
            User::factory()->email_not_verified()->create();
        }
    }

    これをすると、通常のユーザーが10個と、メール確認が終了していないユーザーが1個作成されます。

  • LaravelでSeeder+Factoryの使い方

    LaravelでSeeder+Factoryの使い方

    Laravelで開発していて、SeederとFactoryの使い方でこんがらがったので、整理しました👍

    用意するもの

    以下は新しく作成するときに必要なファイルです。

    • modelファイル
    • migrationファイル
    • Seederファイル
    • Factoryファイル

    簡単に用意する方法

    上記4枚のファイルをartisanを使って簡単に作成する方法があります。

    php artisan make:model Sample -msf

    artisanでmodelを作成します。

    「-」でオプションを付与できるのでmigrationのm、Seederのs、Factoryのfを付与します。

    書く内容

    それぞれのファイルに書く内容は以下です。

    modelファイル

    $fillableを作成した方がいいです👍

    migrationファイル

    テーブルの定義を書く。

    Seederファイル

    実行するFactoryファイルを追加する。

    Factoryファイル

    実際に作成したいテストのデータを書く。

    fakerを使用するのが一般的と思われる。

    DatabaseSeederファイル

    上記の内容に加えて、Seederを司る大元のファイルであるDatabaseSeederに今回で作成したSeederファイルを登録しましょう。

    <?php
    namespace Database\Seeders;
    use Illuminate\Database\Seeder;
    class DatabaseSeeder extends Seeder
    {
        /**
         * Seed the application's database.
         *
         * @return void
         */
        public function run()
        {
            $this->call([
                SampleSeeder::class
            ]);
        }
    }

    実行方法

    migrationファイルでデータを格納する受け皿を用意しました。

    Modelを作成して、生成するデータの雛形を作成しました。

    Factoryファイルで雛形を具体的に書きました。

    Seederファイルでその雛形を実際に作成します。

    以下のコマンドを実行してください。

    php artisan migrate:refresh --seed