端くれプログラマの備忘録 Laravel [Laravel] モデルファクトリを定義してテストデータを作成する

[Laravel] モデルファクトリを定義してテストデータを作成する

Seeder内にFakerとループを使ってテストデータの生成処理を書く代わりに、テストデータを作成するモデルファクトリを定義し、Seederからモデルファクトリを利用することでSeedingを行う方法もある。

1. database/factories/ModelFactory.phpにファクトリを定義する

$factory->define(App\User::class, function (Faker\Generator $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->email,
        'password' => bcrypt(str_random(10)),
        'remember_token' => str_random(10),
    ];
});

Testing – Laravel – The PHP Framework For Web Artisans
https://laravel.com/docs/5.2/testing#model-factories

2. Seeder内でモデルファクトリを使う

public function run()
{
    factory(App\User::class, 50)->create()->each(function($u) {
        $u->posts()->save(factory(App\Post::class)->make());
    });
}

Database: Seeding – Laravel – The PHP Framework For Web Artisans
https://laravel.com/docs/5.2/seeding#using-model-factories