表迁移失败,因为第二个表引用了第一个表



在独立的迁移文件中创建了两个表:CreateReservationsCreateTables。第二个表引用'reservations'中的reservation_id列,并且应该在'reservations'表和'tables'表之间创建一个关系。这个过程失败了,但我不能确定原因,或者如何修复它。

当我运行migrate:latest时,进程失败,因为由于某种原因尚未创建reservation_id列。下面是PostgreSQL返回的错误:

alter table "tables" add constraint "tables_reservation_id_foreign" foreign key ("reservation_id") references "reservations" ("reservation_id") on delete CASCADE - column "reservation_id" referenced in foreign key constraint does not exist

请注意:如果我手动一个接一个地运行迁移,迁移工作就会很好。换句话说,我怀疑"桌子"在"预订"之前正在运行;因为某些原因。

下面是我的Migrations文件夹中的文件:

2021081023——2932_create保留Table.js

...createTable("reservations", (table) => {
table.increments("reservation_id").primary();
table.timestamps(true, true);
table.string("first_name").notNullable();
table.string("last_name").notNullable();
table.string("mobile_number").notNullable();
table.date("reservation_date").notNullable();
table.time("reservation_time").notNullable();
table.integer("people").notNullable();
});

2021081023——5601>Table.js

...createTable("tables", (table) => {
table.increments("table_id").primary();
table.string("table_name").notNullable();
table.integer("capacity").notNullable();
table
.foreign("reservation_id")
.references("reservation_id")
.inTable("reservations")
.onDelete("CASCADE");
});

是否有一种方法可以让我构建一个承诺,以防止任何进程无序运行?一个明显的解决办法?

(对于上下文,这是一个训练营项目的最终作业。作业是为一家餐厅创建一个网站。

看起来您在第二个表中缺少了实际的列定义。您需要在定义列的外键之前定义列。

例如

table.integer("reservation_id").unsigned();
table.foreign("reservation_id")
.references("reservation_id")
.inTable("reservations")
.onDelete("CASCADE");

最新更新