在迁移中使用另一列作为默认值
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'));
很明显这不会更新迁移后插入的新行:为此您需要一个触发器,或者确保您在插入代码中包含它。
我正在尝试向现有 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'));
很明显这不会更新迁移后插入的新行:为此您需要一个触发器,或者确保您在插入代码中包含它。