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

Php 如何使用Laravel迁移删除外键?,php,laravel-5,foreign-keys,database-migration,Php,Laravel 5,Foreign Keys,Database Migration,我曾尝试使用Laravel Migrations删除包含外键的InnoDB表,但我发现我需要先删除外键,但我在文档和文章中读到的内容不起作用 下面是产生问题的代码部分: Schema::table('admin_admin_action', function(Blueprint $table) { $table->dropForeign(['admin_action_id']); $table->dropColumn('admin_actio

我曾尝试使用Laravel Migrations删除包含外键的InnoDB表,但我发现我需要先删除外键,但我在文档和文章中读到的内容不起作用

下面是产生问题的代码部分:

    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
救命啊

我找到了解决办法


你说得对!这是一个概念错误的问题,我创建了一个“admin\u admin\u action”和一个“admin\u action\u admin”表。所以我一直在尝试创建一个没有外键但在数据库中具有相同位置的表。它们是复制品!谢谢

外键似乎不存在,可能只是输入错误,或者您正在查看错误的数据库,因为错误消息中的查询看起来没有问题。谢谢您的回复,但我认为我没有输入错误,我正在处理正确的数据库。我想知道数据库的一个错误概念是否会导致这个问题…我认为这是荒谬的(对laravel来说是新的)。你能检查一下
信息模式中的外键吗?键列的用法
?你是对的!这是一个概念错误的问题,我创建了一个“admin\u admin\u action”和一个“admin\u action\u admin”表。所以我一直在尝试创建一个没有外键但在数据库中具有相同位置的表。它们是复制品!谢谢