我有以下迁移:
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)
一切都很好。我已经检查了很多但没有工作。
以下问题对我不起作用。我不知道为什么,这个问题并没有解决我的问题。
答案 0 :(得分:2)
$table->increments('id')
列类型为integer-> unsigned
的快捷方式基本上你试图将一个整数unsigned链接到一个整数,所以mysql不会让你,因为值范围不匹配(仅正整数与所有整数)
如果您将代码更改为:
$表 - >整数(' PARENT_ID') - >无符号() - >可为空的();
然后mysql会看到关系的两边都有相同的值类型(两边都是正整数的值范围)所以关系是正确的。
作为旁注,并且对于那些想知道,关系可以在关系的一个或两个方面都可以为空,因为nullable是一个约束,而不是一个类型。
答案 1 :(得分:0)
外键类型必须与它们引用的字段类型相匹配。 你的'id'是无符号的,但外键字段不是。