You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者Виктор Минчев

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 06:25:17