LoginSignup
0
0

More than 3 years have passed since last update.

【Laravel】日本語で指定されたFakerから英語のFakerを使う

Posted at

はじめに

モデルファクトリをつかってテスト用のデータを生成する際、氏名は日本語で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での値が変わってくるのはどうしようもないのか・・・。
テストでのみ使うと割り切ればいいのかな。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0