はじめに
今回はLaravelでテストデータを作成する方法をご紹介したいと思います。
Laravelではデータを1件1件手作業で作成する必要はなく、コマンドを実行することによって一気に複数件のデータを作成することができます。
それでは実際に作成していきます。
実行した環境
フレームワーク:Laravel 5.5
DB:MySQL
1.Factoryモデルクラスを作成
下記コマンドでFactoryモデルクラスを作成します。
1 |
php artisan make:factory モデルクラス名Factory --model=モデルクラス名 |
Factoryモデルクラスは後述するSeederクラスで呼び出します。
(例)
1 |
php artisan make:factory UserFactory --model=User |
【Factoryモデルクラス】
1 2 3 4 5 6 7 8 |
use Faker\Generator as Faker; $factory->define(App\User::class, function (Faker $faker) { return [ // ここに処理を記述 ]; }); |
2.returnにカラムに挿入する値を記載
実際にFactoryモデルクラスに処理を記載していきましょう。
1 2 3 4 5 6 7 8 9 10 |
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クラスを設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
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クラスを作成することができます。
1 |
php artisan make:seeder モデル名TableSeeder |
(例)
1 |
php artisan make:seeder UserTableSeeder |
【Seederクラス】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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.オートローダファイル作成
下記コマンドでオートローダを作成します。
1 |
composer dump-autoload |
6.コマンドでSeederクラスを実行
1 |
php artisan db:seed |
特定のSeederクラスだけを実行したい場合は下記のコマンドを実行します。
1 |
php artisan db:seed --class=UserTableSeeder |
DBを確認してデータが作成されていれば成功です。
以上です。