【Laravel8】fakerを使ってダミーデータ を生成する

Factoryを作成する

Factroyとは

Laravelで用意されている、ダミーデータを生成するためのツール
このモデルファクトリを使用することで各Eloquentモデルのデフォルト属性を定義する

ファクトリ内ではfaker (=様々な種類のランダムデータを生成できるライブラリ) を使用できるので、効率よくダミーデータを生成することが可能になる

ここでは、会社テーブルとそれに紐づく仕事テーブルという構造でデータを作成してみる
(モデルやmigrationの作成は割愛)

idname
1会社A
companiesテーブル
idcompany_idtitle
11仕事タイトルA
jobsテーブル

  • CompanyFactoryJobFactoryを作成
php artisan make:factory CompanyFactory
php artisan make:factory JobFactory
  • 生成されたFactoryファイルのdefinitionメソッドを編集する
<?php

namespace Database\Factories;

use App\Models\Company;
use Illuminate\Database\Eloquent\Factories\Factory;

class CompanyFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Company::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        // ⭐️ 変更
        return [
            'name' => $this->faker->company,
        ];
    }
}
<?php

namespace Database\Factories;

use App\Models\Job;
use Illuminate\Database\Eloquent\Factories\Factory;

class JobFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Job::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        // ⭐️ 変更
        return [
            'title' => $this->faker->realText(),
        ];
    }
}

fakerでランダム生成される値が日本語になるように設定変更

  • config/app.php
// 'faker_locale' => 'en_US',
'faker_locale' => 'ja_JP',

念のため設定キャッシュクリア

 php artisan config:cache

ダミーデータ生成用のSeederを作成する

  • 上記で作成したFactoryを実行するためのSeederを作成
php artisan make:seed DummyDataSeeder

  • まずはCompanyを生成してみる
<?php

namespace Database\Seeders;

use App\Models\Company; // ⭐️ 追加
use Illuminate\Database\Seeder;

class DummyDataSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        // ⭐️ 追加
        Company::factory(3)->create();
    }
}
  • 実行
php artisan db:seed --class=DummyDataSeeder
  • 実行結果

$this->faker->companyによりランダムな会社名が生成されてる