Laravel 的迁移刷新期间无法删除外键

Cannot drop foreign key during Laravel's migration refresh

当我在 table 上尝试 运行 php artisan migrate:refresh --seed 时,它总是卡在这个:

public function down()
{
    if (Schema::hasTable('leads')) {
        Schema::table('leads', function (Blueprint $table) {
            $table->dropForeign('leads_dealer_id_foreign'); //this is the line
            $table->dropIndex('leads_dealer_id_index');
            $table->dropColumn('dealer_id');
            Schema::dropIfExists('leads');
        });
    }
}

错误是:Base table or view not found: 1146 Table 'leads' doesn't exist (SQL: alter table leads 删除外键 leads_dealer_id_foreign)

我已经在上面的代码片段中对产生错误的行进行了注释。

  1. 为什么会抱怨 table 不存在?即使 table 不存在,我也将所有内容都包裹在 Schema::hasTable('leads') 中,因此它甚至不应该执行该行。

  2. 是什么导致我的 leads table 提早掉线?我查看了我的其他迁移,除了它自己的迁移文件外,我没有在任何地方删除 table。

谢谢

您必须先删除外键,然后再删除 table。为了在闭包外移动 Schema::dropIfExists('leads');

public function down()
{
    if (Schema::hasTable('leads')) {
        Schema::table('leads', function (Blueprint $table) {
            $table->dropForeign('leads_dealer_id_foreign'); //this is the line
            $table->dropIndex('leads_dealer_id_index');
            $table->dropColumn('dealer_id');
        });
        Schema::dropIfExists('leads');
    }
}