【发布时间】:2017-01-16 13:54:18
【问题描述】:
早安,
我正在尝试在以前这样实现的 Laravel 5.2 迁移中删除外键:
编辑:表中 id 的创建(在使用外键之前)是:
$table->integer('agent_rights_id')->unsigned()->nullable();
外键:
Schema::table('agents', function (Blueprint $table){
$table->foreign('agent_rights_id')->references('id')->on('agent_rights');
});
我的掉落是这样的:
Schema::table('agents', function (Blueprint $table){
$table->dropForeign('agents_agent_rights_id_foreign');
$table->dropColumn('agent_rights_id');
});
我发现,必须使用“真实”索引名称而不是标签 - 我在之前的 sn-p 中已经想到了这一点(作为对 this question 的引用)。
但这给了我错误:
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1025 Error on rename of './{name}/agents' to './{name}/#sql2-2a6-1d8' (errno: 152) (SQL: alter table `agents` drop foreign key `agents_agent_rights_id_foreign`)
[PDOException]
SQLSTATE[HY000]: General error: 1025 Error on rename of './{name}/agents' to './{name}/#sql2-2a6-1d8' (errno: 152)
研究这个并没有真正的解决方案,只有来自 MySQL 的错误消息......
问题:你们对此有何看法,或者我的 sn-p 出了什么问题?
【问题讨论】:
-
在我创建这篇文章之前,我做了这个问题中所说的。这不是同一个问题,因为我已经按照那里所说的做了。
-
你遗漏了一些东西,因为我在我的项目中运行了相同的东西并且它工作正常。无论如何,我删除重复并重新打开它。我还再次仔细检查了您的脚本。请参阅 Laravel 文档 laravel.com/docs/5.2/migrations。
-
你也可以传递一个数组值,当像
$table->dropForeign(['agent_rights_id']);这样删除时会自动使用常规的约束名称 -
@Manish 我试过了,但遗憾的是同样的错误......我是否应该在列被设为除 unsigned() 之外的外键之前添加一些特殊的东西?
标签: php mysql laravel-5.2