回滚迁移时不会删除表

Tables are not dropped when rolling back migration

当我从 Knex 执行回滚命令时,它只会从 knex_migrations table 中删除行,但不会从迁移创建的 table 中删除行。

我正在使用 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');
}

您始终需要 return 来自 updown 函数的 knex 操作的结果。如果您查看我在您的问题中编辑过的示例,您会发现您在 up 中使用了 return 语句,但在 down.

中没有使用

此外,迁移 return 架构构建器(不是 void)。我通常不会在 TS 中编写迁移,但我认为您正在寻找的 signature-wise 类似于:

import Knex, { SchemaBuilder } from 'knex'

export const up = (knex: Knex): SchemaBuilder => {
  return knex.schema.createTable( // ... etc ...
}

确保您始终记住 return 结果的一个技巧是利用箭头函数 auto-return:

export const up = (knex: Knex) => knex.schema.createTable(
  // ... etc ...