如何使用Laravel迁移删除外键?

时间:2018-05-31 20:05:39

标签: php laravel-5 foreign-keys database-migration

我试图使用Laravel Migrations删除一个包含外键的InnoDB表,但是我发现我需要首先删除外键,但我在doc和文章中读到的内容不起作用。

以下是创建问题的代码部分:

    Schema::table('admin_admin_action', function(Blueprint $table) {

        $table->dropForeign(['admin_action_id']);
        $table->dropColumn('admin_action_id');
        $table->dropForeign(['admin_id']);
        $table->dropColumn('admin_id');

    }); 

这是错误代码

   Illuminate\Database\QueryException  : SQLSTATE[42000]: Syntax error or access violation: 1091 Can't DROP 'admin_admin_action_admin_action_id_foreign'; check that column/key exists (SQL: alter table `admin_admin_action` drop foreign key `admin_admin_action_admin_action_id_foreign`)

此表是多对多关联的结果,这里是外键

    Schema::table('admin_admin_action', function($table) {        
        $table->unsignedInteger('admin_id');
        $table->unsignedInteger('admin_action_id');

        $table->foreign('admin_id')->references('id')->on('admin');
        $table->foreign('admin_action_id')->references('id')->on('admin_actions');
    });

我也尝试过指定完整的外键名称,但它说密钥/列不存在,尽管数据库中确实存在。

我怀疑这是迁移的问题,因为迁移运行顺利,但回滚的情况并非如此。

编辑:外键分别命名为

admin_admin_action_admin_id_foreign
admin_admin_action_admin_action_id_foreign

帮助!

1 个答案:

答案 0 :(得分:0)

我找到了解决方案!

你是对的!这是一个误解的问题,我创建了一个“admin_admin_action”和一个“admin_action_admin”表。所以我一直在尝试没有外键但在数据库中具有相同位置的表。他们是重复的!感谢