Laravel5.5 Faker ダミーデータを簡単に自動生成しよう
DBのテストをするときにダミーのデータが欲しいですよね。
テストデータ等はSeederを使って流し込んだりするのですが、それでもそこそこのデータ件数が欲しい時には手動でつくるのはかなり面倒です。
そんな時、Fakerを使うと簡単に大量のデータを作成することができるので便利です
Factoryを生成する
モデルがある前提で進めます
モデルとはなに?って人はこちら
https://readouble.com/laravel/5.5/ja/eloquent.html
php artisan make:factory ArticleFactory --model=Article
上記コマンドから
database/factories/配下にArticleFactory.phpができます
–modelで生成するファクトリファイルへモデル名を指定できます
Fakerを書く
書き方はデフォルトで配置されているdatabase/factories/UserFactory.phpをみてください。初めからファクトリの定義が作成されていますので参考にしましょう。
こんな感じで定義してみました。
database/factories/ArticleFactory.php
use Faker\Generator as Faker;
$factory->define(App\Article::class, function (Faker $faker) {
return [
'user_id' => function () {
return factory(App\User::class)->create()->id;
},
'title' => $faker->title,
'description' => $faker->text,
'imagePath' => $faker->imageUrl($width = 640, $height = 480),
'created_at' => $faker->dateTime,
'updated_at' => $faker->dateTime,
];
});
Fakerを使う
あとは使うだけ
たとえばSeederで1000件ダミーデータを流し込んだり
use Illuminate\Database\Seeder;
class ArticlesTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
// App\Articleインスタンスを1000回生成
factory(App\Article::class, 1000)->create();
}
}
テスト時でつかったり
public function testDatabase()
{
// 一つのApp\Userインスタンスを作成
$user = factory(App\User::class)->create();
// App\Userインスタンスを3つ生成
$users = factory(App\User::class, 3)->create();
// モデルをテストで使用…
}
Fakerのサンプル
いろんなタイプがあります
title($gender = null|'male'|'female') // 'Ms.'
titleMale // 'Mr.'
titleFemale // 'Ms.'
suffix // 'Jr.'
name($gender = null|'male'|'female') // 'Dr. Zane Stroman'
firstName($gender = null|'male'|'female') // 'Maynard'
firstNameMale // 'Maynard'
firstNameFemale // 'Rachel'
lastName // 'Zulauf'
phoneNumber // '201-886-0269 x3767'
tollFreePhoneNumber // '(888) 937-7238'
e164PhoneNumber // '+27113456789'
詳細な一覧はこちらから
https://github.com/fzaninotto/Faker