Laravel ファクトリー 調べてみた

ファクトリーとは

シーダーの1種で、同テーブルに一度に大量のデータを投入したいときに利用する仕組みです。

シーダーについては、こちらを参照ください。

Laravel シーダー 調べてみた

ファクトリーを使用する流れは以下の流れになります。

①モデルクラスを作成

②ファクトリーファイルを作成

③ファクトリーファイルを編集

④ファクトリーファイルを実行

 

モデルクラスを作成

ファクトリーを利用するには、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

以上!!!!!!!