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どんな仕組みになっているのでしょうね。こういうの考える人すごいと思います。