Laravelで業務システム

Laravel関連の記事掲載してます

Laravelでテストデータをデータベースに入れてみる

テストデータについては、Excel等でデータ作成してphpMyAdminからインサートする形で十分かなと思ってましたが、FakerPHPというダミーデータを生成するPHPライブラリを使うと簡単にダミーデータが作れるようなので、今後のことも考え使ってみたいと思います。

0. イントロダクション


FakerPHPはLaravelでは標準で入ってますので、インストール不要です。小生はインストールしようとしてました・・・。

FakerPHPだけでは、指定した、ダミー値を返すクラスですので、大量のデータを生成してDBにインサートすることはできません。

Laravelではモデルファクトリクラスに必要なFakerのプロパティーやメソッドを記述し、シーディングクラスでモデルファクトリで定義したデータを指定数生成し、データベースにインサートします。

ではこのプロセスを順を追ってみてみましょう。

1. Fakerのロケールを日本にする

なんと、Fakerで生成されるデータは日本語にもできるようで、"config/app.php"の"faker_locale"を以下のように変更するだけでいいようです。

'faker_locale' => 'ja_JP',

2. モデルファクトリクラスファイルの作成


Customerテーブルにダミーデータをインサートしますので、Customerモデルのモデルファクトリファイルを作成する形になります。モデルファクトリクラスは以下のようにArtisanで作成できます。

#php artisan make:factory CustomerFactory

ファクトリ名の頭をデータベースのモデル名にしとくと、ファイル内のモデル名等もそれに合わせてくれるようです。

作成したファクトリに生成するダミー値を以下のようにdefinition関数に記述をします。

public function definition()
{
    return [
        'customer_id' => $this->faker->numberBetween(1000000000,2147483647),
        'customer_nm' => $this->faker->company,
        'customer_addr' => $this->faker->streetAddress,
        'customer_tel' => $this->faker->phoneNumber,
        'customer_fax' => $this->faker->phoneNumber,
        'status' => 1,
    ];
}

fakerを使うと上記のようにいろいろなダミー値が作成できます。ほかにもいろいろとバリエーションがありますので、ググってみてください。"status"は変動させる必要ありませんので固定値にしてます。

3. シーディングファイルを作成する


シーディングファイルは以下Artisanで作成することができます。

#php artisan make:seeder CustomerSeeder

作成したシーディングファイルのrun関数に以下を記述をします。

\App\Models\Customer::factory()->count(50)->create();

上記では、データが50レコード作成されます。

4. ダミーデータを生成する。


最後に以下Aritsanでダミーデータがデータベースにインサートされます。

#php artisan db:seed --class=CustomerSeeder

5. まとめ


今回、あまり複雑な手順は取りませんでしたが、結構つかえそうです。しかしFakerどんな仕組みになっているのでしょうね。こういうの考える人すごいと思います。