php - 迁移中的外键错误(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`))
知道为什么它不起作用吗?谢谢你的帮助。
解决方案
您要引用的表,您必须先创建它,然后在另一个迁移中,创建从该表到该引用表的列。
推荐阅读
- python - pandas concat 重新排序的列
- boost - boost::bind 作为参数接受具有 n 个参数的函数,并在进一步的函数调用中使用相同的参数
- r - shiny::observeEvent 工作或中断的条件是什么,即隔离其参数
- cuda - CUDA surf3Dread 重载类型,只有一种有效?
- amazon-web-services - 使用预制 ACL 直接将雪花数据卸载到 S3 位置
- django - django-rest-auth google 和 facebook 注册返回访问令牌和代码
- android - 在模块 jetified-google-pay-client-api-1.0.0-runtime.jar 中发现重复的类 com.google.android.aidl.BaseProxy
- javascript - 将子组件单击处理程序绑定到父状态
- mongodb - 无法将 mongodb 服务器的远程访问权限授予在 ubuntu 上相同 wifi 网络中的其他系统
- scala - Scala 大小写匹配优化以提高性能和可读性