Php 无法使字段在迁移回滚时不可为空

Php 无法使字段在迁移回滚时不可为空,php,laravel,eloquent,migration,Php,Laravel,Eloquent,Migration,我有这个迁移 public function up() { Schema::table('products', function (Blueprint $table) { $table->integer('category_id')->nullable()->unsigned()->change(); }); } public function down() { Schema::table('products', functio

我有这个迁移

public function up()
{
    Schema::table('products', function (Blueprint $table) {
        $table->integer('category_id')->nullable()->unsigned()->change();
    });
}


public function down()
{
    Schema::table('products', function (Blueprint $table) {
        $table->integer('category_id')->nullable(false)->change();
    });
}
它使category_id字段在up方法上可以为null,并且工作正常,但当我尝试回滚时,它返回以下错误:

[PDOException]
SQLSTATE[HY000]: General error: 1832 Cannot change column 'category_id': used in a foreign key constraint 'products_category_id_foreign'

回滚时我应该做什么?此迁移的目的是使字段在运行时可为null,并使其在回滚时不可为null。

我认为您可以尝试关闭外键约束。但请记住这一点。

问题是,当您回滚它时,包含空类别id的每一行突然变得无效。因此,您需要先删除这些行才能运行它。(即使在那时它也可能不起作用,因为它是一个外键约束——但值得一试。)