【问题标题】:Laravel Migration issue : Table self relationLaravel 迁移问题:表自我关系
【发布时间】:2016-09-17 18:36:02
【问题描述】:

我有以下迁移:

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

【问题讨论】:

标签: php laravel laravel-5


【解决方案1】:
$table->increments('id')

是列类型整数的快捷方式->无符号

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

如果您将代码更改为:

$table->integer('parent_id')->unsigned()->nullable();

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

作为旁注,对于那些想知道的人来说,关系可以在关系的任何一方、一侧或两侧都可以为空,因为可空是一种约束,而不是一种类型。

【讨论】:

    【解决方案2】:

    外键类型必须与它们引用的字段类型相匹配。 您的 'id' 是未签名的,但外键字段不是。

    【讨论】:

      猜你喜欢
      • 2017-01-04
      • 2017-09-19
      • 2018-06-21
      • 1970-01-01
      • 2013-03-30
      • 2012-11-12
      • 2017-07-14
      • 2017-01-22
      • 2013-08-27
      相关资源
      最近更新 更多