MySQL外键 - 无法解析表名靠近

时间:2016-02-23 03:07:30

标签: mysql laravel foreign-keys

我遇到了一个真正令我难过的外键问题。运行迁移时遇到的具体错误是:

  

SQLSTATE [HY000]:常规错误:1215无法添加外键约束(SQL:alter table products add constraint products_provider_id_foreign foreign k     ey(provider_id)在删除级联上引用idproviders

最新外键错误下的MySQL SHOW ENGINE INNODB STATUS;结果为:

  

2016-02-22 21:38:17 11debc000表testdb / #sql-186_18db的外键约束出错:    删除级联上的外键(provider_id)引用idproviders):   无法解析表名附近:    (providers)关于删除级联

我检查了以下所有内容:

  • 相同的数据类型:int
  • 相同的数据长度:10
  • 相同签名:unsigned
  • 目标表是一个键:primary
  • 两个表都正确引擎:INNODB
  • 两个表都是相同的字符集:utf8
  • 两个表的排序规则相同:utf8

第一个表格为providers,主键 ID 定义为INT(10)且无符号:

Providers Table

第二个表格为products,其中有一个名为provider_id的列定义为INT(10)且未签名。

Products Table

这个错误当然有很好的记录,特别是在SO上,但没有一个常见的事情(including this checklist)正在发挥作用。有没有人在这里看到任何错误或有任何其他建议?

对于它的价值,我的系统:

  • OSX 10.8.5
  • MySQL 5.6.11
  • 迁移在Laravel 5.2中(虽然这与此问题有关)

修改

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(...)创建了表创建的外键部分,但是当它不起作用时,我尝试在创建之后来出现,以防由于某种原因它不是不正确地构建迁移。

1 个答案:

答案 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');
});

您已将位置换成列名和表格。