我试图使用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
帮助!
答案 0 :(得分:0)
我找到了解决方案!
你是对的!这是一个误解的问题,我创建了一个“admin_admin_action”和一个“admin_action_admin”表。所以我一直在尝试没有外键但在数据库中具有相同位置的表。他们是重复的!感谢