[Laravel] ModelFactoryでリレーションを使う

前回は,リレーションのないUserを追加しました.

今回は,そのUserにPostを持たせてみます.

SPONSORED LINK

モデルを追加する

今回は,Postモデルを追加します.

--migration を付けると,マイグレーションファイルを生成してくれるのでおすすめです.

$ php artisan make:model Post --migration

マイグレーションファイルは次のようにしました.

Schema::create('posts', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('user_id');
    $table->text('body');
    $table->timestamps();
});

マイグレーションファイルができたらマイグレート.

$ php artisan migrate

Factoryを追加する

PostのFactoryを作ります.

--model=Post と付けると,define() の引数にモデル名を入れてくれます.どうせ入れるので,ここで指定した方が楽.

$ php artisan make:factory Post --model=Post

中身は以下のように.

factoryの中で別のfactoryを使っているところがポイントです.

$factory->define(App\Post::class, function (Faker $faker) {
    return [
        'user_id' => function(){
            return factory(App\User::class)->create()->id;
        },
        'body' => $faker->paragraph,
    ];
});

SPONSORED LINK

Seederに追加する

PostsTableSeeder.php

public function run()
{
    factory(\App\Post::class, 5)->create();
}

DatabaseSeeder.php

public function run()
{
    $this->call(PostsTableSeeder::class);
}

リレーションは無理矢理感

もう少し簡単にデータを作成できるものと思っていたんですが,リレーションはかなり強引な印象でした.

もっと他にいい方法があれば,また追記します.


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です