我遇到了一个真正令我难过的外键问题。运行迁移时遇到的具体错误是:
SQLSTATE [HY000]:常规错误:1215无法添加外键约束(SQL:alter table
products
add constraint products_provider_id_foreign foreign k ey(provider_id
)在删除级联上引用id
(providers
)
最新外键错误下的MySQL SHOW ENGINE INNODB STATUS;
结果为:
2016-02-22 21:38:17 11debc000表testdb / #sql-186_18db的外键约束出错: 删除级联上的外键(
provider_id
)引用id
(providers
): 无法解析表名附近: (providers
)关于删除级联
我检查了以下所有内容:
int
10
unsigned
primary
INNODB
utf8
utf8
第一个表格为providers
,主键 ID 定义为INT(10)
且无符号:
第二个表格为products
,其中有一个名为provider_id
的列定义为INT(10)
且未签名。
这个错误当然有很好的记录,特别是在SO上,但没有一个常见的事情(including this checklist)正在发挥作用。有没有人在这里看到任何错误或有任何其他建议?
对于它的价值,我的系统:
Laravel迁移的相关部分是添加外键:
Schema::table('products', function (Blueprint $table) {
$table->foreign('provider_id')->references('providers')->on('id')->onDelete('cascade');
$table->foreign('brand_id')->references('brands')->on('id')->onDelete('cascade');
});
products表的创建如下所示:
public function up()
{
Schema::create('products', function(Blueprint $table) {
$table->increments('id');
$table->integer('provider_id')->unsigned();
提供者迁移的相关部分是:
public function up()
{
Schema::create('providers', function(Blueprint $table) {
$table->increments('id');
我最初使用Schema::create(...)
创建了表创建的外键部分,但是当它不起作用时,我尝试在创建之后来出现,以防由于某种原因它不是不正确地构建迁移。
答案 0 :(得分:4)
改变这个:
Schema::table('products', function (Blueprint $table) {
$table->foreign('provider_id')->references('providers')->on('id')->onDelete('cascade');
$table->foreign('brand_id')->references('brands')->on('id')->onDelete('cascade');
});
到
Schema::table('products', function (Blueprint $table) {
$table->foreign('provider_id')->references('id')->on('providers')->onDelete('cascade');
$table->foreign('brand_id')->references('id')->on('brands')->onDelete('cascade');
});
您已将位置换成列名和表格。