如何解决回滚迁移时不会删除表
当我从Knex执行回滚命令时,它只会从knex_migrations
表中删除行,而不会从迁移创建的表中删除行。
我正在使用MySQL,但是SQLite3也会发生同样的情况。
GitHub存储库:https://github.com/patrick-vieira/knex-rollback
第一次迁移:
import * as Knex from 'knex';
export async function up(knex: Knex): Promise<void>{
return knex.schema.createTable('users',table => {
table.increments('id').primary();
table.string('name').notNullable();
table.string('avatar').notNullable();
table.string('whatsapp').notNullable();
table.string('bio').notNullable();
});
}
// roolback
export async function down(knex: Knex): Promise<void> {
knex.schema.dropTable('users');
}
解决方法
您始终需要从knex
和up
函数返回down
操作的结果。如果您看一下我已为问题编辑的示例,则会看到您在return
中使用了up
语句,但没有在down
中使用。
此外,迁移会返回架构生成器(不是void
)。我通常不会在TS中编写迁移,但我认为您正在寻找的是基于签名的东西,
import Knex,{ SchemaBuilder } from 'knex'
export const up = (knex: Knex): SchemaBuilder => {
return knex.schema.createTable( // ... etc ...
}
确保始终记得返回结果的一种技巧是利用箭头功能自动返回:
export const up = (knex: Knex) => knex.schema.createTable(
// ... etc ...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。