应使用 Laravel 种子器配合模型工厂填充测试数据:创建 UserSeeder 类,通过 User::factory()->count(50)->create() 批量生成用户;支持覆盖默认值和关联数据(如 hasPosts);用 firstOrCreate 或 DB 查询防止重复插入;慎用 migrate:fresh --seed 重置数据库。

你需要快速为 Laravel 项目填充真实感强、结构合理、可复用的测试数据,避免手动 INSERT 或硬编码带来的维护成本和环境不一致问题。
创建基础种子类
运行 Artisan 命令生成一个名为 UserSeeder 的新种子类:
php artisan make:seeder UserSeeder
该命令会在 database/seeders/ 目录下创建 PHP 文件。Laravel 10+ 默认启用 PSR-4 自动加载,类名必须与文件名严格一致,否则 run() 方法不会被调用。
用模型工厂批量生成用户
在 UserSeeder 的 run() 方法中,直接调用 Eloquent 模型工厂:
User::factory()->count(50)->create();
这行代码会生成 50 条用户记录,并自动填充 name、email 等字段——前提是已定义 database/factories/UserFactory.php。若未定义工厂,执行时将抛出 Class 'UserFactory' not found 错误。
如需覆盖默认值,可传入数组参数:
User::factory()->count(10)->create(['status' => 'active', 'email_verified_at' => now()]);
带关联关系的数据填充
第一步:确保模型间已正确定义 Eloquent 关系(如 User hasMany Post);
第二步:在 UserSeeder 中使用 hasPosts() 方法生成关联数据:
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
User::factory()->count(5)->hasPosts(3)->create();
这将创建 5 个用户,每个用户自动关联 3 篇文章,且外键 user_id 被正确写入 posts 表。注意:posts 表必须已存在,且 migration 中已声明 foreignId('user_id')→constrained(),否则插入会因外键约束失败。
避免重复插入的防护逻辑
方法一:使用 DB 查询判断是否已存在关键记录:
if (! DB::table('roles')->where('slug', 'admin')->exists()) { DB::table('roles')->insert(['name' => 'Administrator', 'slug' => 'admin']); }
方法二:利用模型的 firstOrCreate() 方法(推荐用于有唯一索引的字段):
Role::firstOrCreate(['slug' => 'editor'], ['name' => 'Editor']);
【重要前提】 数据库表中必须对 slug 字段设置了 UNIQUE 索引,否则 firstOrCreate 无法识别重复并可能插入多条相同记录。
一次性重置并填充整个数据库
执行以下命令可清空所有表、重新运行迁移、再触发默认种子:
php artisan migrate:fresh --seed
该操作不可逆,会删除当前数据库中所有数据。生产环境严禁运行,开发机执行前建议确认 .env 中 DB_DATABASE 指向的是本地测试库而非线上库。

















