【问题标题】:Laravel:Can't drop foreign key even using 'dropForeign' methodLaravel:即使使用“dropForeign”方法也不能删除外键
【发布时间】:2023-03-09 17:20:01
【问题描述】:

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

[Illuminate\Database\QueryException] SQLSTATE[42000]:语法错误 或访问冲突:1091 Can't DROP 'classes_userid_foreign';查看 该列/键存在(SQL:alter table classes drop foreign key classes_userid_foreign)

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

我什至使用了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');
}

如何解决这个问题?

【问题讨论】:

  • 你检查表并验证外键是否存在?

标签: laravel


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2020-05-25
    • 2018-11-10
    • 1970-01-01
    相关资源
    最近更新 更多