LaravelでFactoryとFakerを使ってダミーデータを大量生産する

大量のダミーデータを作成する段取り

  • Factoryファイルの作成
  • 作成したFactoryファイルの中にFackerを使ってダミーデータをセットする
  • DatabaseSeederで該当のFactoryを登録する

Factoryファイルの作成

php artisan make:facktory HogeFactory –model=Hoge

Fackerを使ってダミーデータをセットする

    // ProductFactory

    public function definition(): array
    {
        return [
            'name' => fake()->name(),
            'information' => fake()->realText(),
            'price' => fake()->numberBetween(10, 100000),
            'sortOrder' => fake()->randomNumber(),
            'shopId' => fake()->numberBetween(1, 2),
            'secondaryId' => fake()->numberBetween(1, 9),
            'image1' => fake()->numberBetween(1, 9),
            'image2' => fake()->numberBetween(1, 9),
            'image3' => fake()->numberBetween(1, 9),
            'image4' => fake()->numberBetween(1, 9),
            'isSelling' => fake()->numberBetween(0, 1),
        ];
    }
    // StockFactory

    public function definition(): array
    {
        return [
            'productId' => Product::factory(), // ProductFactoryを生成し、生成したidを順にいれる
            'type' => fake()->numberBetween(1, 2),
            'quantity' => fake()->randomNumber(),
        ];
    }

Fakerチートシートで必要なプロパティなどを見つけて設定する

DatabaseSeederで該当のFactoryを登録する

    public function run(): void
    {
        $this->call([
            // 省略
        ]);

        // Product::factory(100)->create(); <-この行いらなそう。コメントアウトを外すとProductが200件作られる。理由はStockFactoryの方で'productId' => Product::factory()ですでに生成しているのだと思う。
        Stock::factory(100)->create();
    }

Fackerを日本語化するには

.envの APP_FAKER_LOCALE=ja_JP 設定をすること。

config/app.phpの方で参照される ’faker_locale’ => env(‘APP_FAKER_LOCALE’, ‘en_US’),

コメント

タイトルとURLをコピーしました