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

Laravel中priority字段已设默认值仍报字段不可为空完整性约束错误

问题原因
  • 你提交的数据中明确携带了priority => null,Laravel执行fill()方法时会将该null值直接赋值给模型的priority属性,最终生成的SQL插入语句会主动带上priority字段,值为null。
  • 数据库的字段默认值仅在插入语句未包含该字段时才会触发,主动传递null值的场景下不会启用默认值逻辑。
  • 你的迁移文件仅为priority字段设置了default(1),没有添加->nullable()修饰,该字段本质仍为NOT NULL约束,插入null值自然触发完整性约束错误。
解决方法

根据你的业务需求可选择以下任意一种方案:

  1. 过滤null值的priority字段(推荐)
    该方案可以完美复用数据库设置的默认值逻辑,在控制器拿到请求数据后,删除值为null的priority字段即可:
$data = $request->except('_token');
// 新增以下代码
if (isset($data['priority']) && is_null($data['priority'])) {
    unset($data['priority']);
}

处理后插入SQL不会包含priority字段,数据库会自动使用预设的默认值1。

  1. 控制器层直接赋值默认值
    在控制器层对priority做兜底默认值处理,逻辑更直观可控,不需要依赖数据库默认值:
$data = $request->except('_token');
$data['priority'] = $data['priority'] ?? 1;

无论前端传null还是未传priority字段,都会被赋值为1。

  1. 模型层设置默认属性
    在ScanProfile模型中设置默认属性,当未传入有效值时自动使用1:
// 在ScanProfile模型中添加以下代码
protected $attributes = [
    'priority' => 1
];

注意该方案如果前端明确传递了null值还是会覆盖默认属性,建议配合方案1的过滤逻辑使用。

不推荐方案:在迁移文件给priority字段加->nullable(),这种方式虽然可以解决报错,但会导致priority被存入null值,不符合默认值为1的业务需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:24:05