Laravel 9中如何用Faker生成11位唯一手机号?
Laravel 9 生成11位唯一手机号的Faker填充方案
先修正原代码中的几个问题
usr_is_superuser字段值错误:该字段应表示是否为超级管理员,需用布尔值(0或1)而非now()- 统一使用Laravel 9推荐的全局
fake()助手函数,避免混用$faker变量 usr_first_name和usr_last_name建议分别用firstName()和lastName()生成,更贴合字段含义
生成11位唯一手机号的解决方案
针对国内11位手机号规则(以13/15/17/18/19开头,后续跟9位数字),提供两种可靠实现方式:
方式一:用numerify生成固定/随机号段手机号
通过指定号段前缀,结合numerify生成后续数字,再用unique()保证唯一性:
// 固定号段示例 'usr_mobile_phone' => fake()->unique()->numerify('13#########'), // 随机号段示例 $prefixes = ['13', '15', '17', '18', '19']; 'usr_mobile_phone' => fake()->unique()->numerify($prefixes[array_rand($prefixes)] . '#########'),
方式二:用regexify匹配手机号正则规则
直接通过正则表达式约束格式,精准符合国内手机号规范:
'usr_mobile_phone' => fake()->unique()->regexify('/1[3-9]\d{9}/'),
修正后的完整definition方法
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Str; public function definition() { $prefixes = ['13', '15', '17', '18', '19']; return [ 'usr_first_name' => fake()->firstName(), 'usr_last_name' => fake()->lastName(), 'usr_user_name' => fake()->unique()->userName(), // 用userName()生成更合理的用户名 'usr_mobile_phone' => fake()->unique()->regexify('/1[3-9]\d{9}/'), 'usr_password_hash' => Hash::make('123456'), 'usr_email_address' => fake()->unique()->safeEmail(), 'email_verified_at' => now(), 'usr_is_superuser' => fake()->boolean(10), // 按需调整超级管理员概率,示例为10% 'usr_is_active' => 1, 'usr_str' => Str::random(10), 'remember_token' => Str::random(10), ]; }
内容的提问来源于stack exchange,提问作者Pouya Vaghefi
相关产品推荐
相关产品推荐

