LaravelのseederとfactoryでダミーデータをDBに量産する

2025.01.27

postsテーブルの中にダミーのデータを入れるフローをメモとして残しておく。

単一のダミーデータをDBに入れる(seeder)

まずはシーダーファイルを作る

「sail artisan make:seeder シーダー名」

sail artisan make:seeder PostSeeder

PostSeeder.phpに投稿内容を設定

作成したファイルのrunメソッドの中でpostモデル経由で送る内容を設定

※既にuser_id1を持っている既存のユーザーとして投稿したことにできる

public function run(): void
{
    \App\Models\Post::create([
        'title' => 'シーダーでのテスト',
        'body' => 'シーダーとしてテストをしています。',
        'user_id' => '1', //useridは1として投稿される
    ]);
}

設定したら、下記のコマンドを実行

sail artisan db:seed --class=PostSeeder

PostSeeder.phpで設定した内容がDBに反映される。

複数のダミーデータをDBに入れる(factory)

下記コマンドでfactoryファイルを作成。

「sail artisan make:factory モデル名Factory」

sail artisan make:factory PostFactory

runメソッドの中入れたいデータの内容を記載。ここでは内容はランダムで、文字数だけ設定。

public function definition(): array
{
    return [
        'title'=>fake()->text(10),
        'body'=>fake()->text(40),
        'user_id'=>\App\Models\User::factory(), //post時に新しいuseridを作成
    ];
}

DBにカラムを作成していれば、データタイプはaddressやemailなども可能。

ここではまだDBに入れる記事数は記載しない

DatabaseSeeder.phpにダミー投稿数を記載

ファクトリーで生成するダミーデータの数を下記のファイルの中でrunメソッドにて設定

    public function run(): void
    {
        \App\Models\Post::factory(3)->create(); //factoryを使ってPostモデルののダミーデータを3つ生
    }

下記コマンドで実行

sail artisan db:seed

タイトル、本文が自動で入ったダミーデータが生成され、なおかつusersテーブルにもダミーユーザーが三つ追加されている。

PIC UP