使用新的迁移 knexjs 更新外键约束?
Update foreign key constraint with new migration knexjs?
我正在尝试向迁移中的外键添加 onUpdate onDelete 级联更改。我该怎么做?
没有级联的原始迁移
exports.up = function(knex) {
return knex.schema.createTable('invitations', (table) => {
table.integer('eventId').unsigned().notNullable();
table.foreign('eventId').references('id').inTable('events');
});
};
exports.down = function(knex) {
return knex.schema.dropTable('invitations');
};
带层叠的新迁移
exports.up = function(knex) {
return knex.schema.alterTable('invitations', (table) => {
table.foreign('eventId')
.onUpdate('CASCADE')
.onDelete('CASCADE')
.alter();
});
};
exports.down = function(knex) {
return knex.schema.dropColumn('invitations');
};
新迁移引发错误 'TypeError: table.foreign(...).onUpdate(...).onDelete(...).alter is not a function'。在不回滚原始迁移的情况下执行此操作的正确方法是什么?
由于外键是一次性的,不支持修改
最简单的方法:
- 只需删除外键并创建新的。
- 要回滚,删除外键并使用旧设置重新创建。
exports.up = function(knex) {
return knex.schema.alterTable("invitations", (table) => {
table.dropForeign("eventId");
table
.foreign("eventId")
.references("events.id")
.onDelete("CASCADE")
.onUpdate("CASCADE");
});
}
exports.down = function(knex) {
return knex.schema.alterTable("invitations", (table) => {
table.dropForeign("eventId");
table
.foreign("eventId")
.references("events.id")
.onDelete("NO ACTION")
.onUpdate("NO ACTION");
});
}
我正在尝试向迁移中的外键添加 onUpdate onDelete 级联更改。我该怎么做?
没有级联的原始迁移
exports.up = function(knex) {
return knex.schema.createTable('invitations', (table) => {
table.integer('eventId').unsigned().notNullable();
table.foreign('eventId').references('id').inTable('events');
});
};
exports.down = function(knex) {
return knex.schema.dropTable('invitations');
};
带层叠的新迁移
exports.up = function(knex) {
return knex.schema.alterTable('invitations', (table) => {
table.foreign('eventId')
.onUpdate('CASCADE')
.onDelete('CASCADE')
.alter();
});
};
exports.down = function(knex) {
return knex.schema.dropColumn('invitations');
};
新迁移引发错误 'TypeError: table.foreign(...).onUpdate(...).onDelete(...).alter is not a function'。在不回滚原始迁移的情况下执行此操作的正确方法是什么?
由于外键是一次性的,不支持修改
最简单的方法:
- 只需删除外键并创建新的。
- 要回滚,删除外键并使用旧设置重新创建。
exports.up = function(knex) {
return knex.schema.alterTable("invitations", (table) => {
table.dropForeign("eventId");
table
.foreign("eventId")
.references("events.id")
.onDelete("CASCADE")
.onUpdate("CASCADE");
});
}
exports.down = function(knex) {
return knex.schema.alterTable("invitations", (table) => {
table.dropForeign("eventId");
table
.foreign("eventId")
.references("events.id")
.onDelete("NO ACTION")
.onUpdate("NO ACTION");
});
}