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

Laravel迁移:可空字段设默认值0后仍为null的问题及解决

问题原因
  • 你只给字段设置了默认值,但没移除nullable()约束,字段依然允许存储null值
  • 数据库字段的默认值仅对新插入的记录生效,已存在的null数据不会自动替换成默认值
解决方法

得分两步操作,先处理现有数据,再修改字段属性:

  1. 更新现有null数据并修改字段约束
    修改你的迁移文件,先把表中已有的null值批量改成0,再移除字段的可空约束并保留默认值:

    use Illuminate\Support\Facades\DB;
    
    Schema::table('table', function (Blueprint $table) {
        // 把现有null值更新为0
        DB::table('table')->whereNull('sold_count')->update(['sold_count' => 0]);
        DB::table('table')->whereNull('view_count')->update(['view_count' => 0]);
        
        // 修改字段:取消可空,设置默认值0
        $table->integer('sold_count')->default(0)->nullable(false)->change();
        $table->integer('view_count')->default(0)->nullable(false)->change();
    });
    

    注意:Laravel修改字段类型/约束需要依赖doctrine/dbal包,如果还没安装,先执行这条composer命令:

    composer require doctrine/dbal
    
  2. 效果验证

    • 新插入的记录如果不指定这两个字段的值,会自动填充为0
    • 原有存null的记录已经被批量更新为0,之后字段不再允许存储null值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:20:39