Learn or Die

生涯勉強。Macです。

シーダーでテスト用データを作成する

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個のダミーデータが作成されているはずです。