我需要构建一个名为“slides”的表,其中包含名为“id”和“work_id”的两列。 ID 不是 AUTO_INCRMENT 整数,因为我需要将数字保留为幻灯片中的索引。
这是运行“php artisan migrate”时显示的错误:
这是我的代码:
Schema::create('slides', function(Blueprint $table) {
$table->integer('id');
$table->integer('work_id');
$table->primary(['id', 'work_id']);
$table->foreign('work_id')->references('id')->on('works');
});
这是我的“作品”表的结构:
这是尽管发生错误但生成的“幻灯片”表的结构:
我不明白错误消息,因为我对 SQL 不太熟悉,所以有人可以告诉我导致输出此错误的代码有什么问题吗?谢谢。
最佳答案
我不确定 Eloquent 如何(如果有的话)处理复合键。也就是说,您的错误消息来自 MySQL。神秘错误 150 通常与格式错误的外键约束有关。
如果您遇到上述情况,则 slides
中的 work_id
外键与您尝试的 id
类型不同与之匹配。虽然两列都是 int
,其中一列是 int(10)
,另一列是 int(11)
。它还显示一个是 UNSIGNED
,另一个是已签名的。
如果您可以调整迁移以使两列相同,您应该能够解决这个特定的外键问题。
关于php - Laravel 创建复合外键时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26185429/