シーダーでテスト用データを作成する
Laravelのモデルファクトリを使えば、大量のテスト用データを自動的に作成してくれます。
前提
テーブルとモデルが作成済みであること。
テーブル名:tests モデル名:Test
とする。
モデルファクトリを作成
$ php artisan make:factory TestFactory --model=Test
database/factories配下にファクトリが作成されます。
モデルをファクトリに紐付ける
作成したTestファクトリを、Testモデルに紐付けます。
以下を追加。
<?php use App\Models\Test; //追記
ファクトリを記述
<?php $factory->define(Test::class, function (Faker $faker) { return [ //列名=>ダミーデータの条件 'your_name' => $faker->name, 'title' => $faker->realText(50), 'email' => $faker->unique()->email, 'url' => $faker->url, 'contact' => $faker->realText(200), ]; });
コードに出てくるFakerとは、テスト用データを作成してくれるライブラリの機能です。
引数で文字数などを指定できます。
テスト用データを日本語にする
Fakerはこのままだとダミーデータが英語になってしまうので、日本語になるよう設定します。
config/app.phpを変更▼
<?php 'faker_locale' => 'js_JP',
シーダーを作成
$ php artisan make:seeder TestsTableSeeder
※大文字小文字に気をつける
database/seeds配下にシーダーが作成されます。
シーダーを記述
今回は100個のダミーデータを作ります。
<?php //Testモデルをインポートする use App\Models\Test; class TestSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { factory(Test::class,100)->create(); //100個のダミーデータ } }
DatabaseSeeder.phpに追記
DatabaseSeederに、TestSeederを呼び出すよう追記。
<?php class DatabaseSeeder extends Seeder { /** * Seed the application's database. * * @return void */ public function run() { $this->call(UserSeeder::class); $this->call(TestSeeder::class); //追記 } }
実行する
$ composer dump-autoload
$ php artisan migrate:fresh --seed
100個のダミーデータが作成されているはずです。