Node, Sequelize, Sync модели, сила смешения: правда / ложь

0

Я в замешательстве (снова).

При определении таблиц базы данных (MySQL), используя Sequelize, я хочу выполнить синхронизацию (принудительное выполнение: true) для удаления/создания таблиц. Все идет нормально.

Теперь я доволен своей user таблицей и не хочу отбрасывать ее при каждом запуске, пока продолжаю определять другие таблицы.

Итак, я хотел бы установить флажок для user параметров, sync: {forced: false}

module.exports = (sequelize, DataTypes) => {
  let Schema = sequelize.define(
    "user",
    {
      id: {
        type: DataTypes.INTEGER,
        autoIncrement: true,
        primaryKey: true
      },
      BlaBla:{}
    },
    { // options
      sync: {force: false},
      freezeTableName: true,
      timestamps: true
    });
  return Schema;
};

Это не работает. Таблица удаляется/создается при каждом запуске.

Переходим к определению таблицы моей company.

module.exports = (sequelize, DataTypes) => {
  let Schema = sequelize.define(
    "company",
    {
      id: {
        type: DataTypes.INTEGER,
        autoIncrement: true,
        primaryKey: true
      },
      BlaBla:{}
    },
    { // options
      sync: {force: true},
      freezeTableName: true,
      timestamps: false
    });
  return Schema;
};

Вопрос

  • Как выборочно синхронизировать таблицы на sequelize.define параметров per sequelize.define?
  • 1
    1. Я не могу найти документ для использования синхронизации в качестве опции в define. Вы уверены, что это разрешено? 2. Если вы синхронизируете () таблицы по отдельности (вместо того, чтобы использовать sequelize.sync () для всех таблиц), вы можете по-разному «вызывать» для каждой таблицы).
Теги:
sequelize.js
model

1 ответ

0

Выборочная синхронизация в sequelize.define() не поддерживается. См. Конфигурацию определения модели для деталей. В другом месте вашего проекта у вас должен быть вызов sequelize.sync({force: true}) который синхронизирует все модели. Вы должны исправить это в первую очередь, так как все ваши модели будут синхронизированы.

После исправления у вас есть несколько вариантов:

1: использовать миграции вперед. Каждое добавление или изменение в вашей схеме фиксируется в процессе миграции, поэтому вы можете развернуть каждое изменение без повторной синхронизации других. См. Http://docs.sequelizejs.com/manual/migrations.html.

2: Синхронизируйте каждую таблицу отдельно, как вы предлагаете. Вам нужно будет вызвать метод sync() для каждой модели отдельно, например:

const company = require('./company');
const user = require('./user');
user.sync({force:true});
company.sync();

Это может быть полезно для ранней разработки, но по мере продвижения в проекте и начала выпуска, миграции должны стать вашим предпочтительным методом развертывания изменений схемы.

См. Http://docs.sequelizejs.com/manual/models-definition.html#database-synchronization.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню