Почему моя миграция меток dropTimestamps не выполняется?

#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();
      })
    }
  });
};