我知道很多人多次提出同样的问题,但似乎我无法让同样的解决方案适合我。
我无法为下面给出up()
的相关表设置外键:
//Migrate 1 Starts
public function up()
{
Schema::create("UserTable", function($table){
$table->tinyInteger("ApplicationID");
$table->bigInteger("UserID");
$table->string("UserName")->unique();
$table->timestamps();
});
}
//Migrate 1 Ends
//Migrate 2 Starts
public function up()
{
Schema::create("Membership", function($table){
$table->tinyInteger("ApplicationID");
$table->bigInteger("UserID");
$table->string("Password");
}
}
//Migrate 2 Ends
//Migrate 3 Starts: This has the latest timestamp, so it runs after all tables are created
public function up()
{
Schema::table('UserTable', function($table) {
$table->primary("UserID");
$table->foreign("UserID")->references("UserID")->on("Membership");
});
Schema::table('Membership', function($table) {
$table->primary("UserID");
$table->foreign("UserID")->references("UserID")->on("UserTable");
});
}
//Migrate 3 Ends
我得到的错误是SQLSTATE[HY000]: General rror: 1215 Cannot add foreign key constraint (SQL: alter table 'Membership' add constraint membership_userid_foreign foreign key ('UserID') references 'UserTable' ('UserID'))
答案 0 :(得分:0)
问题是我在设置外键时设置了主键。这引起了问题。
因此,必须在创建表时设置主列,而必须在创建所有相关表后添加外键。
我想我们在创建所有表之后创建一个create_associations
迁移文件会更好,以便此迁移具有最新的时间戳,并且到执行此文件时,所有表都存在于数据库中。