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

问题描述 投票:0回答:1

我正在尝试将新列添加到具有列tableName的现有anotherColumn表中。

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

如何将现有列的值添加到此新列中?

sql knex.js
1个回答
1
投票

简短的答案是,您不能:defaultTo值不能来自另一列。但是,如果您只是想在迁移时进行默认设置,则可以执行以下操作:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.