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

问题描述 投票:0回答:1

我尝试使用 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
php laravel-5 foreign-keys database-migration
1个回答
-1
投票

我找到了解决方案!

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

© www.soinside.com 2019 - 2024. All rights reserved.