Laravelにおけるテストデータの作成例

はじめに

今回はLaravelでテストデータを作成する方法をご紹介したいと思います。
Laravelではデータを1件1件手作業で作成する必要はなく、コマンドを実行することによって一気に複数件のデータを作成することができます。

それでは実際に作成していきます。

実行した環境

フレームワーク:Laravel 5.5
DB:MySQL

1.Factoryモデルクラスを作成

下記コマンドでFactoryモデルクラスを作成します。

php artisan make:factory モデルクラス名Factory --model=モデルクラス名

Factoryモデルクラスは後述するSeederクラスで呼び出します。

(例)

php artisan make:factory UserFactory --model=User

【Factoryモデルクラス】

use Faker\Generator as Faker;


$factory->define(App\User::class, function (Faker $faker) {
    return [
        // ここに処理を記述
    ];
});

 

2.returnにカラムに挿入する値を記載

実際にFactoryモデルクラスに処理を記載していきましょう。

use Faker\Generator as Faker;

$factory->define(App\User::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
        'remember_token' => str_random(10),
    ];
});

 

*$faker->にてCtrl+スペースを押すと候補がでてきます。
参考URL:https://readouble.com/laravel/5.5/ja/database-testing.html

3.モデルクラスの設定

今回例としてUserクラスを設定します。

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;

class User extends Model
{
    use Notifiable;

    const CREATED_AT = 'created_at';
    const UPDATED_AT = 'updated_at';
    protected $table = 'users';
    protected $connection = 'mysql';
    protected $primaryKey = "id"; // Auto incrementなどの主キーがある場合は明示的に設定しておく必要があります。
    public $timestamp = true; // updated_atとcreated_atのカラムに現在時間を挿入したいときはtrueを設定します。

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
  // テストデータに挿入する値を設定します。
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

4.Seederクラス作成コマンドの実行

下記のコマンドでSeederクラスを作成することができます。

php artisan make:seeder モデル名TableSeeder

(例)

php artisan make:seeder UserTableSeeder

【Seederクラス】

use Illuminate\Database\Seeder;

class UserTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
     // Factoryメソッドの第一引数にモデルクラス、第二引数に作成するテストデータの件数を記載
        factory(App\User::class, 100)->create();
    }
}

5.オートローダファイル作成

下記コマンドでオートローダを作成します。

composer dump-autoload

6.コマンドでSeederクラスを実行

php artisan db:seed

特定のSeederクラスだけを実行したい場合は下記のコマンドを実行します。

php artisan db:seed --class=UserTableSeeder

DBを確認してデータが作成されていれば成功です。

以上です。


--------------------------
システム開発のご要望・ご相談はこちらから

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です