首页 > 解决方案 > 迁移中的外键错误(Laravel 6.0)

问题描述

我试图弄清楚 Laravel 中的迁移是如何工作的。在这里你可以看到我正在创建 2 个表。在第二个表(RealNationalLeague)中,我在第一个表(RealNationalLeagueLevel)中有两列(real_nation_id,level)的外键。

public function up()
    {

        ...

        Schema::create(Model\RealNationalLeagueLevel::TABLE, function (Blueprint $table) {
            $table->unsignedInteger("real_nation_id");
            $table->unsignedTinyInteger("level");

            $table->foreign("real_nation_id")->references("id")->on(Model\RealNation::TABLE);
            $table->primary(["real_nation_id", "level"]);
        });


        Schema::create(Model\RealNationalLeague::TABLE, function (Blueprint $table) {
            $table->increments("id");
            $table->unsignedInteger("real_nation_id");
            $table->unsignedTinyInteger("level");
            $table->string("name", 32);

            $table->foreign("real_nation_id")->references("real_nation_id")->on(Model\RealNationalLeagueLevel::TABLE); // this works
            $table->foreign("level")->references("level")->on(Model\RealNationalLeagueLevel::TABLE); // this does not
        });
    }

运行迁移不起作用。它抛出 QueryException:

SQLSTATE[HY000]: General error: 1005 Can't create table `testdb`.`#sql-17a00_448a37` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `real_national_league` add constraint `real_national_league_level_foreign` foreign key (`level`) references `real_national_league_level` (`level`))

知道为什么它不起作用吗?谢谢你的帮助。

标签: phpmysqlsqllaravel

解决方案


您要引用的表,您必须先创建它,然后在另一个迁移中,创建从该表到该引用表的列。


推荐阅读