在独立的迁移文件中创建了两个表:CreateReservations
和CreateTables
。第二个表引用'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");