はじめに
今回は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を確認してデータが作成されていれば成功です。
以上です。