#knex.js
Вопрос:
Моя миграция показана ниже. Вызов hasColumn() возвращает значение true, поэтому столбец created_at действительно существует. Однако вызов dropTimestamps (), похоже, не имеет никакого эффекта. Я знаю это, потому что после этого происходит миграция, которая добавляет метки времени с другими свойствами. Эта миграция завершается ошибкой, из-за которой столбец created_at уже существует. Я включил —debug, когда запускал миграцию knex:последняя версия, и я никогда не видел, чтобы операторы DROP-СТОЛБЦОВ из вызова dropTimestamps() выполнялись, даже если я знаю, что вызывается функция dropTimestamps (). Что я делаю не так?
exports.up = function(knex) {
return knex.schema.table('ab_camp_user', function(table) {
knex.schema.hasColumn('ab_camp_user', 'created_at').then(function(exists) {
console.log("ab_camp_user.created_at exists = ", exists);
if (exists) {
table.dropTimestamps();
}
})
});
};
Ответ №1:
О! Тест hasColumn должен выходить за пределы таблицы alter. Вздох…
Правильный код:
exports.up = function(knex) {
return knex.schema.hasColumn('ab_camp_user', 'created_at').then(function(exists) {
if (exists) {
return knex.schema.table('ab_camp_user', function(table) {
table.dropTimestamps();
})
}
});
};