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 tableproducts
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我添加了迁移代码的相关片段。哈哈。这应该是我今晚放弃的暗示。谢谢你发现了!难以置信的这个问题在过去的几个小时里一直困扰着我,我想我已经检查了无数次我所有的桌子属性。这很容易被忽视,我很高兴我发现了这一点!哈。这应该是我今晚放弃的暗示。谢谢你发现了!难以置信的这个问题在过去的几个小时里一直困扰着我,我想我已经检查了无数次我所有的桌子属性。这很容易被忽视,我很高兴我发现了这一点!