【Laravel6】FakerとFactoryを利用したダミーデータの作成(ホテル予約システム4)
タグ:
Laravel
授業課題の解説
Fakerを利用する
これを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); } } }
最後にターミナルでSeederを実行します。
php artisan db:seed
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',