问题描述
当我从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 ...