因为我收到错误(errno: 150 "Foreign key constraint is incorrectly formed")
我已经阅读了这个主题,似乎无法弄清楚我的问题是什么。我想设置的外键是无符号整数。两个表等的数据类型相同。
这是我的迁移:
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()
标记,那么迁移会顺利进行,但我不希望这样,因为会有重复的数据。
我有什么遗失的东西吗?
答案 0 :(得分:0)
我假设您正在尝试将外键添加到非唯一列。
根据您的业务逻辑,有两种方法可以解决这个问题。
首先,您可以选择在多个列上创建唯一键,并在sample_migration
表上引用相同的键。
其次,您可以将subject_type
列作为索引键,如此
$table->integer('subject_type')->unsigned()->index();
此方法仍然具有非唯一列的外键,我个人不建议这样做,因为它可能会产生如下所述的不良后果:https://stackoverflow.com/a/2179372/3929188