我正在尝试将新列添加到具有列tableName
的现有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'));
希望很明显,这不会更新在迁移后插入的新行:为此,您将需要一个触发器,或确保在插入代码中覆盖了它。