はじめに
モデルファクトリをつかってテスト用のデータを生成する際、氏名は日本語でFakerを使いたい、でもIDとかは英語で使いたい・・・ってなった時に、コンフィグで日本語設定をしつつ、使いたいときだけ英語のFakerを使う方法です。
標準言語設定
app.php
/*
|--------------------------------------------------------------------------
| Faker Locale
|--------------------------------------------------------------------------
|
| This locale will be used by the Faker PHP library when generating fake
| data for your database seeds. For example, this will be used to get
| localized telephone numbers, street address information and more.
|
*/
'faker_locale' => 'ja_JP',
この状態でFakerを使うとこんな感じなる。
Factory.php
$factory->defineAs(User::class, 'user', function (Faker $faker) {
return [
'login_id' => $faker->unique()->firstName . '_' . $faker->unique()->lastName,
//例)山口_真綾
'firstname' => $faker->firstName,
// 例)津田
'lastname' => $faker->lastName,
//例)裕樹
];
});
氏名はいいけどlogin_idは英語にしたい時
Factory.php
$factory->defineAs(User::class, 'user', function (Faker $faker) {
$faker_en = \Faker\Factory::create('en_US');
return [
'login_id' => $faker_en->unique()->firstName . '_' . $faker_en->unique()->lastName,
//例)Brannon_Donnelly
'firstname' => $faker->firstName,
// 例)津田
'lastname' => $faker->lastName,
//例)裕樹
];
});
configはデフォルトの言語を設定してくれるだけなので、他言語を使うときはfaker オブジェクトをインスタンス化する際に引数に指定するだけでよかった。
調べてみて
Laravelにデフォルトでついている機能なだけあって、他にも簡単に設定ができて柔軟に対応できる機能が沢山あった。
ただLogin_idの値とfirstname,lastnameでの値が変わってくるのはどうしようもないのか・・・。
テストでのみ使うと割り切ればいいのかな。