在迁移中使用另一列作为默认值

Use another column as default value in migration

我正在尝试向现有 tableName table 添加一个新列,其中有一列 anotherColumn.

exports.up = function (knex, Promise) {
    return knex.schema.table('tableName', table => {
        table.string('newColumn').defaultTo(table.anotherColumn);
    });
};

我应该如何将现有列的值添加到这个新列中?

简短的回答是,您不能:defaultTo 值不能来自另一列。但是,如果您只是想让默认值在迁移时发生,您可以这样做:

exports.up = knex =>
  knex.schema.table('tableName', t => {
    t.string('newColumn')
  })
    .then(() => knex('tableName').update('newColumn', knex.ref('anotherColumn'));

很明显这不会更新迁移后插入的新行:为此您需要一个触发器,或者确保您在插入代码中包含它。