我如何更改列类型而不丢失使用 adonis 的迁移中的数据库数据?

How i can alter a column type without lose the database data in migration using adonis?

我有这个class:

class BookUnitQuestionSchema extends Schema {
  up () {
    this.create('book_unit_question', (table) => {
      table.increments()
      table.integer('book_unit_id').references('id').inTable('book_unit')
      table.string('correct_answer_description')
      table.boolean('status').defaultTo(false)
      table.integer('user_id').references('id').inTable('users')
      table.timestamps()
    })
  }

  down () {
    this.drop('book_unit_question')
  }
}

我需要将列 correct_answer_description 的数据类型更改为 text。 如果我将实际 up() 方法更改为:

table.text('correct_answer_description')

并制作一个:adonis migration:refresh

所有 table 都已重新创建,我丢失了此 table 中的数据。

如何只更改数据类型而不丢失数据?

我尝试类似的方法:

this.alter('book_unit_question', (table) => {
  table.text('correct_answer_description')
})

并制作一个:

adonis migration:run

但我得到:

Nothing to migrate

您需要创建一个新的迁移文件,例如:

修改类型(新建迁移文件):.alter()

class BookUnitQuestionSchema extends Schema {
  up() {
    this.alter('book_unit_questions', (table) => {
      table.text('correct_answer_description').notNullable().alter();
    })
  }

  // reverse modification 
  down() {
    this.table('book_unit_questions', (table) => {
      table.string('correct_answer_description').notNullable().alter();
    })
  }
}

和 运行 待定迁移:

> adonis migration:run