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

Laravel 8 User工厂报错:Field 'username'无默认值

问题分析

调用User::factory()->create()时触发数据库错误:

SQLSTATE[HY000]: General error: 1364 Field 'username' doesn't have a default value (SQL: insert into admin_users (updated_at, created_at) values (2023-01-01 10:00:00, 2023-01-01 10:00:00))

从SQL语句能看出,仅插入了默认的时间戳字段,工厂定义的username等必填字段完全没被写入。结合你手动实例化赋值save()正常的情况,说明问题出在工厂与模型的绑定关系上——Laravel没有正确识别UserFactory对应的User模型,导致工厂定义的字段数组未被使用。

正确解决方案

在UserFactory类中明确指定关联的User模型即可解决:

<?php

namespace Database\Factories;

use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;

class UserFactory extends Factory
{
    // 新增:明确绑定工厂对应的User模型
    protected $model = User::class;

    public function definition(): array
    {
        return [
            'username' => $this->faker->unique()->userName,
            'password' => bcrypt('password'),
            'name' => $this->faker->name,
            'avatar' => $this->faker->imageUrl(),
            'email' => $this->faker->unique()->safeEmail
        ];
    }
}
验证修改

修改完成后重新执行User::factory()->create();,Laravel会正确读取工厂定义的字段数组,结合模型的$fillable配置完成批量插入,满足数据库必填字段要求,不会再触发1364错误。

补充说明

你之前用protected $model = Administrator::class的临时方案能生效,是因为该模型与admin_users表绑定正确,但不符合你的实际业务模型需求。通过给UserFactory指定正确的User模型,既解决了问题,又符合代码语义化和项目结构规范。

内容的提问来源于stack exchange,提问作者Max Slyusarchuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:32:20