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

Laravel decimal类型字段设置默认值报非空违反错误如何解决?

Laravel Decimal类型字段设置默认值报非空违反错误的解决办法

你尝试的5种default()写法本身语法正确,报错并非默认值格式问题,通常是迁移逻辑、字段修饰规则或旧数据冲突导致的,可按以下步骤排查解决:

  • 确认字段定义的调用顺序正确,default()需紧跟在字段类型定义后,示例标准写法:
    // 18为总位数,2为小数位数,可根据业务需求调整,非空修饰放在default之后
    $table->decimal('字段名', 18, 2)->default(0)->notNull();
    
    如果是修改已有字段,需额外添加->change()方法:
    $table->decimal('字段名', 18, 2)->default(0)->notNull()->change();
    
  • 若你是为已存在数据的表新增非空字段,可分两步执行避免旧数据无值报错:
    1. 第一次迁移先将字段设为可空并添加默认值,执行迁移后手动将所有旧行的该字段值填充为0
    2. 第二次迁移再将字段修改为非空属性
      对应代码示例:
    // 第一次迁移代码
    $table->decimal('字段名', 18, 2)->default(0)->nullable();
    // 旧数据填充完成后的第二次迁移代码
    $table->decimal('字段名', 18, 2)->default(0)->notNull()->change();
    
  • 排查数据库配置限制,可临时将config/database.php中对应数据库连接的strict参数设为false,测试是否为严格模式对默认值的规则限制导致报错。
  • 若迁移缓存导致规则未生效,开发环境可执行以下命令重置迁移后重试:
    php artisan migrate:rollback
    php artisan cache:clear
    php artisan migrate
    
  • 若执行迁移时同步运行了数据填充逻辑,检查填充代码中是否给该字段赋值,或确认插入操作会触发数据库默认值规则。

相关截图参考:
迁移文件截图
报错截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:15:08