【发布时间】:2020-01-16 04:18:30
【问题描述】:
我试图弄清楚 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`))
知道为什么它不起作用吗?感谢您的帮助。
【问题讨论】:
-
尝试在
Model\RealNationalLeague::TABLE上将您的列名从level更改为level_id