Laravel 9如何通过Factory生成指定多组值的用户记录?
实现方案:Laravel 9 Factory 生成指定多组用户记录
完全可以仅通过 Factory 实现需求,下面提供两种实用方案,适配不同的调用场景:
方案一:结合随机预设 + 状态方法(推荐)
修改你的 AdminLoginFactory,既支持随机生成预设用户,也能精准创建指定角色的用户:
class AdminLoginFactory extends Factory { protected $model = Users::class; // 存储所有预设的用户数据 private $presetUsers = [ ['name' => 'Jon', 'Age' => 19, 'Position' => 'Super admin'], ['name' => 'James', 'Age' => 22, 'Position' => 'Admin'], ['name' => 'Eva', 'Age' => 20, 'Position' => 'User'], ]; public function definition() { // 默认随机返回一个预设用户 return $this->faker->randomElement($this->presetUsers); } // 定义超级管理员状态 public function superAdmin() { return $this->state(fn () => $this->presetUsers[0]); } // 定义管理员状态 public function admin() { return $this->state(fn () => $this->presetUsers[1]); } // 定义普通用户状态 public function regularUser() { return $this->state(fn () => $this->presetUsers[2]); } }
Seeder 调用方式
// 随机生成1个预设用户 Users::factory(1)->create(); // 精准生成超级管理员 Users::factory()->superAdmin()->create(); // 精准生成管理员 Users::factory()->admin()->create(); // 精准生成普通用户 Users::factory()->regularUser()->create(); // 批量生成所有3个预设用户 Users::factory()->superAdmin()->create(); Users::factory()->admin()->create(); Users::factory()->regularUser()->create();
方案二:直接批量创建所有预设用户
如果只需要一次性生成全部3个指定用户,也可以用以下两种方式:
方式1:Factory 新增批量方法
class AdminLoginFactory extends Factory { protected $model = Users::class; private $presetUsers = [ ['name' => 'Jon', 'Age' => 19, 'Position' => 'Super admin'], ['name' => 'James', 'Age' => 22, 'Position' => 'Admin'], ['name' => 'Eva', 'Age' => 20, 'Position' => 'User'], ]; public function definition() { return []; } public function createAllPreset() { foreach ($this->presetUsers as $user) { $this->model::create($user); } return $this; } }
Seeder 调用:
Users::factory()->createAllPreset();
方式2:直接在 Seeder 中使用 createMany
// 直接通过模型批量创建,无需修改Factory Users::createMany([ ['name' => 'Jon', 'Age' => 19, 'Position' => 'Super admin'], ['name' => 'James', 'Age' => 22, 'Position' => 'Admin'], ['name' => 'Eva', 'Age' => 20, 'Position' => 'User'], ]);
内容的提问来源于stack exchange,提问作者Виктор Минчев
相关产品推荐
相关产品推荐

