Laravel 5.5迁移时设置is_img列默认值无效的问题求助
解决Laravel 5.5迁移中为is_img列设置默认值的问题
嘿,我来帮你搞定这个迁移的坑!你的代码里有两个关键问题导致默认值设置失败,咱们一步步来修正:
问题分析
- 错误使用
change()方法:change()是用来修改已存在表中列属性的方法,绝对不能在Schema::create()(创建新表)的闭包里使用——这就是你的列被意外删除的核心原因。 - 拼写错误:你把
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列补加默认值,需要按以下步骤操作:
- 先安装依赖包(Laravel修改列属性需要用到
doctrine/dbal):
composer require doctrine/dbal
- 生成一个专门用于修改列的迁移文件:
php artisan make:migration add_default_to_admins_is_img_column --table=admins
- 在新迁移的
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
相关产品推荐
相关产品推荐

