Laravel Migration问题:表自我关系

时间:2016-05-20 13:12:31

标签: php laravel laravel-5

我有以下迁移:

Schema::create('tags', function (Blueprint $table) {
            $table->increments('id')->unsigned()->index();
            $table->string('name',30);
            $table->integer('parent_id')->nullable();
            $table->string('image_url');
            $table->string('image_id',50);
            $table->timestamps();

            $table->foreign('parent_id')
                  ->references('id')->on('tags')
                  ->onDelete('cascade');
        });

出现以下问题:

 (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alte  
  r table `tags` add constraint `tags_parent_id_foreign` foreign key (`parent_id`) references `tags` (`id`) on delete cascade)

一切都很好。我已经检查了很多但没有工作。

以下问题对我不起作用。我不知道为什么,这个问题并没有解决我的问题。

StackOverFlow Question

2 个答案:

答案 0 :(得分:2)

$table->increments('id')

列类型为integer-> unsigned

的快捷方式

基本上你试图将一个整数unsigned链接到一个整数,所以mysql不会让你,因为值范围不匹配(仅正整数与所有整数)

如果您将代码更改为:

$表 - >整数(' PARENT_ID') - >无符号() - >可为空的();

然后mysql会看到关系的两边都有相同的值类型(两边都是正整数的值范围)所以关系是正确的。

作为旁注,并且对于那些想知道,关系可以在关系的一个或两个方面都可以为空,因为nullable是一个约束,而不是一个类型。

答案 1 :(得分:0)

外键类型必须与它们引用的字段类型相匹配。 你的'id'是无符号的,但外键字段不是。