ゆったりゲーム三昧

趣味についてなんでも書くブログ。ゲーム三昧って書いてるけどゲームだけではなく、趣味のプログラミングについてもツラツラ書いている。

【備忘録】Laravel5.3において、ModelFactoryで日本語のFakerを用いる方法

デフォルトでは、Fakerのlocaleはen_ENとなっているため、
$faker->nameなどは英語名が返ってきて、
$faker->kanaNameなどの日本語のFakerのプロパティは使用できない。

//ModelFactory.php
$factory->define(App\Model::class, function (Faker\Generator $faker) {
    return [
        'name' => $faker->name,
        ...        
    ];
});



Fakerのlocaleを変更する方法

単体でFaker使う場合、日本語のlocaleは以下のようにしてできる。

$faker = Faker\Factory::create('ja_JP');
$faker->name;
$faker->kanaName;



LaravelのModelFactoryを用いてlocaleを変更したい場合、
一番簡単な方法はサービスプロバイダーを書き足してあげるとよい。

<?php
namespace App\Providers;

use Illuminate\Support\ServiceProvider;

use Faker\Generator as FakerGenerator;    //<- 追加
use Faker\Factory as FakerFactory;        //<- 追加

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        // 追加
        $this->app->singleton(FakerGenerator::class, function () {
            return FakerFactory::create('ja_JP');
        });
    }
}



上の方法とは別に、ModelFactoryでのみlocaleを設定したい場合、以下のようにしてできる。

//ModelFactory.php
use Faker\Factory as FakerFactory;

$factory->define(App\Model::class, function($faker) {
    $faker = FakerFactory::create('ja_JP');
    
    return [
        'name' => $faker->name,
        'kana' => $faker->kanaName,
    ];
});



参考:
[検索ワード laravel locale faker]
https://laracasts.com/discuss/channels/laravel/how-to-localize-the-modelfactory
http://stackoverflow.com/questions/30762464/laravel-5-1-localize-factory-seeder