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

Laravel 5.5迁移时设置is_img列默认值无效的问题求助

解决Laravel 5.5迁移中为is_img列设置默认值的问题

嘿,我来帮你搞定这个迁移的坑!你的代码里有两个关键问题导致默认值设置失败,咱们一步步来修正:

问题分析

  1. 错误使用change()方法:change()是用来修改已存在表中列属性的方法,绝对不能在Schema::create()(创建新表)的闭包里使用——这就是你的列被意外删除的核心原因。
  2. 拼写错误:你把default写成了defalut,这个笔误直接让默认值的配置失效了。

正确的实现方式

情况1:新建admins表时直接设置默认值

如果这是第一次创建admins表,直接在列定义里添加正确的default(0)即可,完全不需要change():

public function up() {
    Schema::create('admins', function (Blueprint $table) {
        $table->increments('id');
        $table->string('email');
        $table->string('user_name');
        $table->string('password');
        $table->string('login_type');
        // 修正拼写错误,移除多余的change()
        $table->integer('is_img')->default(0);
        $table->timestamps();
    });
}

执行这个迁移后,is_img列的默认值会被设为0,新插入的数据如果不指定该列的值,会自动填充0。

情况2:修改已存在的admins表,给is_img列添加默认值

如果admins表已经创建完成,现在要给已有的is_img列补加默认值,需要按以下步骤操作:

  1. 先安装依赖包(Laravel修改列属性需要用到doctrine/dbal):
composer require doctrine/dbal
  1. 生成一个专门用于修改列的迁移文件:
php artisan make:migration add_default_to_admins_is_img_column --table=admins
  1. 在新迁移的up方法中编写修改逻辑:
public function up() {
    Schema::table('admins', function (Blueprint $table) {
        $table->integer('is_img')->default(0)->change();
    });
}

// 可选:编写回滚逻辑,方便后续撤销修改
public function down() {
    Schema::table('admins', function (Blueprint $table) {
        $table->integer('is_img')->default(null)->change();
    });
}

执行这个迁移后,已有的is_img列就会被设置默认值0,同时不会删除任何数据或列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:38:08