Laravel迁移:使用外键更改列

Laravel迁移:使用外键更改列,laravel,migration,Laravel,Migration,我正试图在删除fk后更改列默认值,但仍然出现错误: SQLSTATE[HY000]: General error: 1832 Cannot change column 'training_status_id': used in a foreign key constraint 'fk_user_training_training_status1_idx' (SQL: ALTER TABLE user_training CHANGE training_status_id training_stat

我正试图在删除fk后更改列默认值,但仍然出现错误:

SQLSTATE[HY000]: General error: 1832 Cannot change column 'training_status_id': used in a foreign key constraint 'fk_user_training_training_status1_idx' (SQL: ALTER TABLE user_training CHANGE training_status_id training_status_id INT DEFAULT 1)
迁移代码:

Schema::table('user_training', function ($table) {
           $table->dropForeign('fk_user_training_training_status1_idx');
           $table->integer('training_status_id')->default(1)->change();
           $table->foreign('training_status_id', 'fk_user_training_training_status1_idx')
               ->references('id')->on('training_status')
               ->onDelete('set null')
               ->onUpdate('cascade');
        });

可能是因为数据库中有数据,所以可以使用disableForeignKeyConstraints();要忽略约束,请执行以下操作:

Public up function(){
Schema::disableForeignKeyConstraints();

Schema::table('user_training', function ($table) {
           $table->dropForeign('fk_user_training_training_status1_idx');
           $table->integer('training_status_id')->default(1)->change();
           $table->foreign('training_status_id', 'fk_user_training_training_status1_idx')
               ->references('id')->on('training_status')
               ->onDelete('set null')
               ->onUpdate('cascade');
        });

Schema::enableForeignKeyConstraints();
}
列“training_status.id”是未签名的,因此列“user_training.training_status_id”也必须是未签名的,所以我需要指定修饰符“unsigned()”。 此外,在这种情况下,在迁移过程中不需要删除并重新创建外键:

Schema::table('user_training', function ($table) {
           $table->integer('training_status_id')->default(1)->unsigned()->change();
        });

是的,数据库有数据,但在迁移过程中,我在alter列之前删除了外键。无论如何,问题是引用的列具有未签名的数据类型,所以我必须在迁移中指定它。