【Laravel】Factoryで例外を作るやつ
Laravelで一部、こっちが指定した情報でデータを作成してほしいことがあったので、Factoryに例外を作成する方法をご紹介します。
今回は「メール確認が終了していないユーザーを作成する」という趣旨で作成します。
Factoryを修正
Factoryファイルのdefinitionメソッドを普通に埋めた後に、新しくメソッドを作成しましょう。
名前は分かり易ければなんでもOKです👍
1 2 3 4 5 6 7 8 |
public function email_not_verified() { return $this->state(function (array $attributes) { return [ 'email_verified_at' => null ]; }); } |
例外のFactoryを実行
作成した例外のFactoryを実行しましょう。
通常のFactoryは以下のコマンドでSeederから実行します。
1 2 |
// 複数個作成するときはnのその数を入力する(1個のときは空でOK)。 User::factory(n)->create(); |
これを先ほど作成した例外バージョンで実行する方法は以下です。
1 |
User::factory()->email_not_verified()->create(); |
factoryメソッドを呼んで、createメソッドで実際に作成する前に、例外のメソッド(今回で言うとemail_not_verifiedメソッド)を間に噛ませてあげるとその例外が作成できます👍
上記を書いたあとはSeederを実行してください。(下記の例だとDBのレコードは全部リセットされます)
1 |
php artisan migrate:refresh --seeder |
通常も例外も両方作成する
必ずしもどちらか一方しか実行できないわけではなくて、もちろん両方とも同時に実行できます。
何を言っているかと言うのは、以下のコードを見たら分かると思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?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の使い方 2022.10.07
-
次の記事
【Laravel】ルートパラメータの使い方 2022.10.12