ホーム » モデルファクトリについて

モデルファクトリについて

モデルファクトリとは、eloquentで利用できるテストデータを楽に挿入するための仕組みになります。
モデルファクトリには、fakerと呼ばれる偽のデータを作成する仕組みが利用出来ます。

モデルファクトリの利用方法について

definitionメソッドで利用します。

public function definition()
    {
        return [
            'name' => $this->faker->name(),
            'email' => $this->faker->unique()->safeEmail(),
            'email_verified_at' => now(),
            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
            'remember_token' => Str::random(10),
        ];
    }

factoryの生成

php artisan make:factory BookFactory

database/factoriesディレクトリに配置されます。

model上で HasFactoryをuseすると使えます。

class Book extends Model
{
    use HasFactory;
}

factoryの利用

// 1ユーザ作る
$user = User::factory()->make();

// 3ユーザ作る
$users = User::factory()->count(3)->make();

// factoryを上書きして利用する
$user = User::factory()->make([
    'name' => 'Abigail Otwell',
]);

$user = User::factory()->make([
    'name' => 'Abigail Otwell',
    'email' => 'testtest@example.net'
]);

// App\Models\Userインスタンスを一つ作成
$user = User::factory()->create();

// App\Models\Userインスタンスを3つ作成
$users = User::factory()->count(3)->create();

makeとcreateの違い

makeは、モデルの新しいインスタンスを作成します。なので、saveとかしないとDBに保存されない。
createは、Eloquentのsaveメソッドを利用してデータベースに保存されます。

create、makeのソースをみると、createはsaveメソッドを読んでいて、makeは、instanceを返している
/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php