理系公務員のプログラミング日記

【Laravel6】FakerとFactoryを利用したダミーデータの作成(ホテル予約システム4)

タグ:
Laravel
授業課題の解説

Fakerを利用する

FakerはLaravelに標準で準備されている、現実に近いデータを用意してくれるライブライです。

これをSeederで使ってみて、より現実に近いテストデータを準備してみます。

GuestsTableSeeder

class GuestsTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $faker = \Faker\Factory::create('ja_JP'); for ($i = 0; $i < 10; $i++){ $param = [ 'name' => $faker->name(), 'address' => $faker->address(), 'tel' => $faker->phoneNumber(), 'created_at' => now(), 'updated_at' => now(), ]; DB::table('guests')->insert($param); } } }

参考:[Laravel5.1]Fakerチートシート

最後にターミナルでSeederを実行します。

php artisan db:seed

Factory関数としてまとめる

以上の工程でダミーデータを作成することができましたが、これをFactory関数としてまとめておくことができます。

まずはターミナルで、factoryを生成するコマンドを実行します。

Guestモデルを作成するfactoryなので、GuestFactoryとします。

php artisan make:factory GuestFactory

作成したGuestFactoryを編集します。

さきほどGuestTableSeederに記載した内容とほぼ同じです。

このFactoryと対応するModelをdefine->(App\Guest::class, ・・・)で指定します。

(このコードはLaravel6のコードです。最新版のLaravel8では変更があります。)

GuestFactory.php

<?php /** @var \Illuminate\Database\Eloquent\Factory $factory */ use App\Model; use Faker\Generator as Faker; $factory->define(App\Guest::class, function (Faker $faker) { return [ 'name' => $faker->name(), 'address' => substr($faker->address(),7), 'tel' => $faker->phoneNumber(), ]; });

Seederでこれを実行するように書き換えます。

GuestsTableSeeder.php

<?php use Illuminate\Database\Seeder; class GuestsTableSeeder extends Seeder { public function run() { factory(App\Guest::class,20)->create(); } }

これを実行します。

php artisan migrate:fresh --seed

英語のダミーデータが作成されてしまったと思います。configフォルダのapp.phpから、fakerの設定を日本語に変更します。

config/app.php

//略 'faker_locale' => 'ja_JP',