Laravel 9.x插入数据报错General error:1364,字段'name'无默认值
解决Laravel 9.x插入数据时General error: 1364 Field 'name' doesn't have a default value报错
以下是直接可行的排查和解决步骤:
确认迁移变更已生效
不要仅依赖迁移文件,直接查看数据库表结构,确认name字段的Null属性是否为YES(设置nullable()后),或是否存在默认值(设置default('')后)。若数据库字段仍为必填状态,执行php artisan migrate:refresh(会重置表数据)或php artisan migrate:rollback && php artisan migrate重新执行迁移,确保变更落地。检查数据插入逻辑
验证规则通过不代表实际插入时传递了name字段:- 确认是否使用
$request->all()或正确的$request->only(['name', 'username', 'password'])获取所有必填字段; - 手动赋值模型时,是否遗漏
$model->name = $request->name;这类代码; - 排查代码中是否不小心将
name字段值设为null或空字符串,而数据库实际仍为必填状态(若迁移未生效)。
- 确认是否使用
验证模型可填充字段
检查模型的$fillable数组是否准确包含name字段,避免拼写错误(比如写成names)。也可临时替换为protected $guarded = [];(允许所有字段批量赋值),排除$fillable配置错误的可能。排查数据库严格模式
打开config/database.php,找到mysql配置下的strict选项,暂时设为false测试是否还报错。若报错消失,说明严格模式下即使字段nullable,Laravel未正确传递null值导致数据库报错。这种情况可调整插入逻辑,确保未传递的nullable字段显式设为null,或保持strict模式并确保迁移和数据传递都正确。检查模型观察者/全局作用域
若模型设置了creating或saving观察者,排查是否在观察者逻辑中修改或清空了name字段值,导致插入时该字段缺失。
内容的提问来源于stack exchange,提问作者Kennedy Owusu
相关产品推荐
相关产品推荐

