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

Laravel中nullable字段创建数据时提示“cannot be null”错误

问题排查与解决方案

1. 先确认数据库字段的实际状态

别光看迁移文件,直接查数据库里的ladders表结构:

  • 用数据库客户端查看description字段的Nullable属性是否为YES,默认值是否设为NULL
  • 或者执行SQL命令:DESCRIBE ladders;,检查对应行的Null列是否为YES

如果字段实际不允许null,说明迁移没正确执行:

  • 本地开发环境可以回滚重跑迁移:php artisan migrate:rollback && php artisan migrate
  • 生产环境直接用SQL修改字段:ALTER TABLE ladders MODIFY COLUMN description TEXT NULL;

2. 检查控制器的验证规则

你的验证规则必须明确允许description字段可省略或为空,示例如下:

$validated = $request->validate([
    // 其他必填字段的规则
    'description' => 'nullable|string',
]);

如果验证规则里没加nullable,或者根本没把description加入验证规则:

  • 没加nullable的话,提交空值会被验证拦截(但你报的是数据库错误,所以更可能是后者)
  • 没加入验证规则的话,请求里省略该字段时,$validated数组里就没有这个键,create方法不会传递该字段给数据库,而如果数据库字段没设默认值且不允许null,就会触发“Field 'description' doesn't have a default value”错误。这种情况可以手动补默认值:
Ladders::create(array_merge($validated, [
    'description' => $request->input('description') ?? null,
]));

3. 确认Model的$fillable配置

你已经把description加入$fillable了,这部分没问题,但要仔细检查字段名的拼写、大小写是否和数据库完全一致(比如别写成desc或者Description)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:45:33