Laravel 数据填充国内手机号码、地址等
使用数据填充器让laravel的测试变的方便,我们经常要添加国内的手机号码等,通过查看源码发现,有 Address
, Color
, Company
, DateTime
, Internet
, Payment
, Person
, PhoneNumber
这些本地化Provider
可以支持中文。
用法如下:
$factory->define(\App\Admin::class, function (Faker $faker) {
return [
'address' =>$faker->address,
'color' => $faker->colorName,
'company' => $faker->company,
'date_time' =>$faker->dateTime,
'email' => $faker->email,
'payment' => $faker->bank(),
'username' => $faker->userName,
'name' => $faker->name,
'first_name' => $faker->firstName,
'mobile' => $faker->phoneNumber,
];
});
Illuminate\Database\Eloquent\Collection {#3137
all: [
App\Admin {#3133
address: "西安高新开发区",
color: "天青石蓝",
company: "太极传媒有限公司",
date_time: DateTime @718532579 {#3131
date: 1992-10-08 16:22:59.0 Asia/Shanghai (+08:00),
},
email: "qvoluptates@sina.com",
payment: "中国民生银行",
username: "aperiam_error",
name: "苟军",
first_name: "颖",
mobile: "13061754492",
},
],
}
其中Person
会获取中文姓名和username
的格式, Internet
会影响获取email
时的数据。
在laravel中默认使用en_US
的Provider
,但是在 DatabaseServiceProvicer
中通过获取配置信息可以指定加载的Locale
。
protected function registerEloquentFactory()
{
$this->app->singleton(FakerGenerator::class, function ($app) {
return FakerFactory::create($app['config']->get('app.faker_locale', 'en_US'));
});
$this->app->singleton(EloquentFactory::class, function ($app) {
return EloquentFactory::construct(
$app->make(FakerGenerator::class), $this->app->databasePath('factories')
);
});
}
所以我们只需要在config/app.php
添加 'faker_locale' => 'zh_CN',
即可。
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 6年前 自动加精
这个赞, 填充数据的时候, 手机号码我一直是使用的正则. 我又 out 了.
感觉类似于这样的文章, 应该放在 wiki 里更合适.
数据有误, Laravel 5.5 经测试, 正确的使用与文中不一致.
报错信息:
生成的数据如下:
@qiuyuhome 多谢指出问题,原来不是都是通过属性调用的,不同的provider会影响部分方法和属性获取,我更新了下文章~将调取方法列出来了
@qiuyuhome 话说怎么发到WIKI里面 - -,
@sureyee 我也不知道. 🤪
laravel 官方文档里面的数据填充有介绍过~