Laravel ファクトリー 調べてみた
ファクトリーとは
シーダーの1種で、同テーブルに一度に大量のデータを投入したいときに利用する仕組みです。
シーダーについては、こちらを参照ください。
ファクトリーを使用する流れは以下の流れになります。
①モデルクラスを作成
②ファクトリーファイルを作成
③ファクトリーファイルを編集
④ファクトリーファイルを実行
モデルクラスを作成
ファクトリーを利用するには、eloquentクラスが必要になります。
以下コマンドで、データを投入したいテーブルに対応したモデルクラスを作成しましょう。
php artisan make:model ファイル名
ファクトリーファイルを作成
ファクトリーファイルは以下のコマンドで作成することができます。
php artisan make:factory ファイル名
このコマンドで、App/database/factoriesにファクトリーファイルが作成されます。
ファイル名を「eloquentモデル名Factory」にすれば、eloquentモデルと紐づいたファクトリークラスが作成されます。
また、ファイル名の後に--model=eloquentクラス名
を追加すれば、明示的にファクトリークラスとeloquentモデルを紐付けてファクトリーファイルを作成することができます。
ファクトリーファイルを編集
上記コマンドで作成されたファクトリーファイルの例が以下になります。
App/database/factorie/UserFactory.php
<?php
namespace Database\Factories;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
class UserFactory extends Factory
{
protected $model = User::class; ・・・①
public function definition()
{
return [ ・・・②
'name' => $this->faker->name(),
'email' => $this->faker->unique()->safeEmail(),
'email_verified_at' => now(),
'remember_token' => Str::random(10),
];
}
}
①ファクトリークラスと紐づいているモデルクラスになります。
モデルクラスの紐付きを変更したい場合は、ここを変更します。
②投入するデータを配列で指定します。
ダミーデータを作成する場合は、Fakerを使用することができます。
ファクトリーファイルを実行
作成したファクトリークラスを実行する場合は、App/database/seeders/DatabaseSeeder.phpに設定を追記します。
以下例になります。
App/database/seeders/DatabaseSeeder.php
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run()
{
\App\Models\User::factory(10)->create(); ・・・①
}
}
①紐づいているeloquentモデルからファクトリークラスを呼び出します。
factoryメソッドの引数に作成したいデータの数を入れ、createメソッドを実行します。
最後に、以下コマンドを実行すればファクトリークラスによって作成されたダミーデータが設定した数分データベースに保存されます。
php artisan db:seed
以上!!!!!!!