Laravel项目报错SQLSTATE[23000]:DescAnunUser字段不可为NULL
解决Laravel中SQLSTATE[23000]字段非空约束错误
错误原因
数据库表TblAnunUsuario的DescAnunUser字段被设置为非空(Laravel默认string字段不允许为null),但插入/更新数据时该字段值为null,触发了数据库完整性约束。
解决步骤
1. 确认请求参数是否正确传递
- 检查前端提交的字段名是否为
DescAnunUser,注意大小写、拼写是否和后端一致。 - 在控制器方法开头添加调试代码,查看实际接收的参数:
dd($request->all()); // 打印所有请求参数,确认是否包含DescAnunUser
2. 添加请求验证(推荐)
在保存数据前,用Laravel的验证机制拦截无效请求,提前返回错误提示:
public function addAnunUsuario(Request $request) { // 验证请求参数 $validated = $request->validate([ 'TituloAnunUser' => 'required|string', 'DescAnunUser' => 'required|string', // 强制要求该字段必填 'PrecoAnunUser' => 'required|integer', 'RequisitosAnunUser' => 'required|string', 'ImgAnunUser' => 'required|string', 'StatusAnunUser' => 'required|max:1', 'DataAnunUser' => 'required|date', 'idUserAnunUser' => 'required|exists:TblUsuario,idUser', 'idTipoServAnunUser' => 'required|exists:TblTipoServico,idTipoServ', ]); // 使用验证后的参数创建模型 $anunuser = TblAnunUsuario::create($validated); return response()->json([ 'status'=>'200', 'message'=>'Anúncio inserido com sucesso', ]); }
验证不通过时,Laravel会自动返回包含错误信息的JSON响应,无需手动处理。
3. 确认模型的$fillable配置
检查TblAnunUsuario模型,确保$fillable数组中包含DescAnunUser(你的代码已配置正确,此步仅做确认):
protected $fillable = ['TituloAnunUser', 'DescAnunUser', 'PrecoAnunUser', 'RequisitosAnunUser','ImgAnunUser', 'StatusAnunUser', 'DataAnunUser', 'idUserAnunUser', 'idTipoServAnunUser'];
4. 可选:允许字段为空(如果业务需要)
如果业务逻辑允许DescAnunUser为空,修改数据库迁移文件:
$table->string('DescAnunUser')->nullable();
然后重新运行迁移命令:
php artisan migrate:refresh
⚠️ 注意:migrate:refresh会清空表数据,生产环境请使用migrate:rollback + migrate,或创建新迁移文件修改字段属性。
内容的提问来源于stack exchange,提问作者Shalgun
相关产品推荐
相关产品推荐

