我尝试使用 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_admin_action”和一个“admin_action_admin”表。所以我一直在尝试没有外键但在数据库中具有相同位置的表。它们是重复的!