MySQL外键-无法解析接近的表名

MySQL外键-无法解析接近的表名,mysql,laravel,foreign-keys,Mysql,Laravel,Foreign Keys,我遇到了一个外键问题,这真的让我难堪。我在运行迁移时遇到的具体错误是: public function up() { Schema::create('providers', function(Blueprint $table) { $table->increments('id'); SQLSTATE[HY000]:一般错误:1215无法添加外键约束(SQL:alter tableproductsadd constraint products\u provider\

我遇到了一个外键问题,这真的让我难堪。我在运行迁移时遇到的具体错误是:

public function up()
{
    Schema::create('providers', function(Blueprint $table) {
        $table->increments('id');
SQLSTATE[HY000]:一般错误:1215无法添加外键约束(SQL:alter table
products
add constraint products\u provider\u id\u foreign k ey(
provider\u id
)引用了删除级联上的
id
providers

MySQL
显示引擎INNODB状态结果为:

2016-02-22 21:38:17 11debc000表testdb/#sql-18618DB的外键约束错误: 外键(
provider\u id
)引用删除级联上的
id
providers
): 无法解析靠近以下位置的表名: 删除级联上的(
提供程序

我已经检查了以下所有内容:

  • 相同的数据类型:
    int
  • 相同的数据长度:
    10
  • 相同签名:
    未签名
  • 目标表是一个键:
    primary
  • 两个表都更正了引擎:
    INNODB
  • 两个表的字符集相同:
    utf8
  • 两个表的排序规则相同:
    utf8
第一个表是
providers
,其主键id定义为
INT(10)
,且未签名:

第二个表是
products
,它有一个名为
provider\u id
的列,定义为
INT(10)
,未签名

这个错误当然有很好的文档记录,尤其是在这样的情况下,但是没有一个常见的东西()起作用。有没有人认为这里有什么问题或有其他建议

无论如何,我的系统:

  • 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(…)
创建表时使用外键部分,但当它不起作用时,我尝试在创建后使用外键部分,以防由于某些原因无法正确构建迁移。

更改此项:

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('providers')->on('id')->onDelete('cascade');
    $table->foreign('brand_id')->references('brands')->on('id')->onDelete('cascade');
});


您已将位置替换为列名和表

您能否也发布产品和提供商的迁移?语法有点落后。它必须是
引用表(列)
,但您有
引用列(表)
。应该是
引用提供程序(id)
。Laravel创建了那个语法吗?@JeremyHarris:您添加了
$table->integer('provider_id')->unsinged()了吗
$table->integer('brand_id')->unsigned()
在您的迁移中?@jilsontomas我添加了迁移代码的相关片段。您是否也可以发布产品和提供商的迁移?语法有点落后。它必须是
引用表(列)
,但您有
引用列(表)
。应该是
引用提供程序(id)
。Laravel创建了那个语法吗?@JeremyHarris:您添加了
$table->integer('provider_id')->unsinged()了吗
$table->integer('brand_id')->unsigned()在您的迁移中?@jilsontomas我添加了迁移代码的相关片段。哈哈。这应该是我今晚放弃的暗示。谢谢你发现了!难以置信的这个问题在过去的几个小时里一直困扰着我,我想我已经检查了无数次我所有的桌子属性。这很容易被忽视,我很高兴我发现了这一点!哈。这应该是我今晚放弃的暗示。谢谢你发现了!难以置信的这个问题在过去的几个小时里一直困扰着我,我想我已经检查了无数次我所有的桌子属性。这很容易被忽视,我很高兴我发现了这一点!