Schema::create('groups', function (Blueprint $table) {
$table->integer('year');
$table->integer('groups_number');
$table->primary(['year','groups_number']);
});
Schema::create('student_groups', function (Blueprint $table) {
$table->integer('student_groups_year');
$table->integer('student_groups_number');
$table->primary(['student_groups_year', 'student_groups_number']);
});
Schema::table('student_groups', function (Blueprint $table) {
$table->foreign('student_groups_year')
->references('year')->on('groups');
$table->foreign('student_groups_number')
->references('groups_number')->on('groups');
});
这是两个不同的文件。我在一个文件中创建表,在另一个文件中创建外键。问题是当我制作第二个外键时。当我只制作一个外键时,它工作正常,但是当我制作第二个时,它会出错。无论如何知道为什么我不能将两个外键引用到同一个表中?这是我收到的错误消息。
In Connection.php line 664:
SQLSTATE [HY000]:常规错误:1005无法创建表bpo
。#sql-26ec_995
(错误:150"外键约束形成错误")(SQL :alter table student_groups
添加约束student_grou
ps_student_groups_number_foreign
外键(student_groups_number
)引用groups
(groups_number
))
在Connection.php第458行:
SQLSTATE [HY000]:常规错误:1005无法创建表bpo
。#sql-26ec_995
(错误:150"外键约束形成错误")
我找到了答案!!无法在任何地方找到它,这很简单!你必须把它放在相同的外键代码中。
$table->foreign(['student_groups_number','student_groups_year'])
->references(['group_number','year'])->on('groups');
答案 0 :(得分:1)
我找到了答案!!无法在任何地方找到它,它是如此简单!你必须把它放在相同的外键代码中。
$table->foreign(['student_groups_number','student_groups_year'])
->references(['group_number','year'])->on('groups');
答案 1 :(得分:0)
将您的外键更改为无符号整数,您可以这样做
{
"_id" : ObjectId("5a7f4b46f489dd236410d77c"),
"name" : "second",
"users" : [
{ _id : ObjectId("5a1db9e8db97d318ac70715d") }
]
}
并确保不要将 $table->integer('student_groups_number')->unsigned();
类型用作外键。
varchar
希望这有帮助。