Laravel Faker设置en_SG locale后仅生成重复名称求助
解决Laravel中en_SG locale下Faker仅生成固定名称的问题
原因分析
fakerphp/faker v1.9.1版本中,en_SG本地化的名称数据源非常有限,仅内置了John Doe和Jane Doe两组默认名称,属于版本自带Provider的数据缺失问题。
解决方案
1. 升级fakerphp/faker版本
后续版本的faker已补充了en_SG的多组名称数据,执行以下命令完成升级:
composer require fakerphp/faker:^1.20 --update-with-dependencies
升级完成后重新运行数据填充,即可生成更多不同的新加坡英文风格名称。
2. 自定义Faker名称Provider(适合不愿升级版本的场景)
手动扩展en_SG的名称数据源:
- 在项目
app/Faker目录下创建EnSgNameProvider.php文件:
<?php namespace App\Faker; use Faker\Provider\Base; class EnSgNameProvider extends Base { protected static $firstNames = [ 'Arjun', 'Mei', 'Raj', 'Siti', 'Kai', 'Aisha', 'Ben', 'Lina', 'David', 'Priya' ]; protected static $lastNames = [ 'Tan', 'Lee', 'Ng', 'Wong', 'Chua', 'Raj', 'Singh', 'Ong', 'Lim', 'Goh' ]; public function name() { return $this->firstName() . ' ' . $this->lastName(); } public function firstName() { return static::randomElement(static::$firstNames); } public function lastName() { return static::randomElement(static::$lastNames); } }
- 在
AppServiceProvider的boot方法中注册自定义Provider:
use App\Faker\EnSgNameProvider; use Faker\Factory; public function boot() { $faker = Factory::create('en_SG'); $faker->addProvider(new EnSgNameProvider($faker)); }
之后在工厂中调用$this->faker->name(),即可生成自定义的新加坡本地化名称。
3. 临时使用相近locale(备选方案)
若无需严格的新加坡本地化名称,可临时将faker_locale配置为en_US或en_GB,这两个locale内置了大量多样化的名称数据。
内容的提问来源于stack exchange,提问作者Amit Shah
相关产品推荐
相关产品推荐

