外来约束是错误形成的问题(laravel)

时间:2018-04-02 08:52:17

标签: mysql database laravel laravel-migrations

因为我收到错误(errno: 150 "Foreign key constraint is incorrectly formed")

我遇到了一个我无法进行laravel迁移的错误

我已经阅读了这个主题,似乎无法弄清楚我的问题是什么。我想设置的外键是无符号整数。两个表等的数据类型相同。

这是我的迁移:

  Schema::create('sample_migration', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('subject_id')->unsigned();
        $table->string('1');
        $table->string('2');
        $table->integer('3');
        $table->string('4');
        $table->integer('5');
        $table->integer('type')->unsigned();
        $table->timestamps();

       $table->foreign('type')->references('subject_type')->on('some_table');
    });

some_table上我将subject_type作为无符号整数。两者都使用相同的排序规则和编码。

如果我在相关字段中添加了unique()标记,那么迁移会顺利进行,但我不希望这样,因为会有重复的数据。

我有什么遗失的东西吗?

1 个答案:

答案 0 :(得分:0)

我假设您正在尝试将外键添加到非唯一列。

根据您的业务逻辑,有两种方法可以解决这个问题。

首先,您可以选择在多个列上创建唯一键,并在sample_migration表上引用相同的键。

其次,您可以将subject_type列作为索引键,如此

$table->integer('subject_type')->unsigned()->index();

此方法仍然具有非唯一列的外键,我个人不建议这样做,因为它可能会产生如下所述的不良后果:https://stackoverflow.com/a/2179372/3929188