Laravel:即使使用' dropForeign'也不能删掉外键。方法

时间:2017-05-30 19:51:57

标签: laravel

我即将刷新我的迁移。但是php artisan migrate:refresh命令不起作用。 它显示以下错误:

  

[Illuminate \ Database \ QueryException] SQLSTATE [42000]:语法错误   或访问冲突:1091 DROP' classes_userid_foreign&#39 ;;校验   该列/密钥存在(SQL:alter table classes删除外键   classes_userid_foreign

     

[PDOException] SQLSTATE [42000]:语法错误或访问冲突:   1091 DROP' classes_userid_foreign&#39 ;;检查列/键
  存在

我甚至使用dropForeign,但它不适合我。

我正在显示我的migration文件

public function up()
{
    Schema::create('classes', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('userId')->unsigned();
        $table->string('title');
        $table->string('name');
        $table->string('code')->unique();
        $table->integer('capacity')->unsigned();
        $table->integer('tagId')->unsigned();
        $table->foreign('userId')->references('id')->on('users');
        $table->timestamps();
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::table('classes', function (Blueprint $table) {
        $table->dropForeign(['userId']);
    });
    Schema::drop('classes');
}

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

大多数情况下,当您在laravel中运行迁移(无论是向上还是向下),并且沿着该行发生错误时,事务可能已部分完成而未在迁移表中注册。

如果是这种情况,或者您想删除表是否确实存在外键,那么您应该考虑禁用外键检查,如下所示:

public function down()
{
    Schema::disableForeignKeyConstraints();
    Schema::drop('classes');
    Schema::enableForeignKeyConstraints();
}