Laravel迁移。我无法添加两个引用同一个表

时间:2018-02-10 15:59:59

标签: php mysql laravel migration

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)引用groupsgroups_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');

2 个答案:

答案 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

希望这有帮助。