sequelize-cli db: migrate не создает таблицу ассоциаций

У меня есть модель User (со связанным файлом миграции, созданным sequelize-cli):

'use strict';
module.exports = (sequelize, DataTypes) => {
    const User = sequelize.define('User', {
        dispName: DataTypes.STRING,
        email: DataTypes.STRING,
        phoneNum1: DataTypes.STRING
    }, {});
    User.associate = function (models) { // associations added manually
        User.belongsToMany(models.Role, { through: 'UserRoles', foreignKey: 'userId' });
    };
    return User;
};

вот сгенерированный файл миграции:

'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Users', {
      cognitoId: { // modified: was an auto-incrementing integer
        allowNull: false,
        primaryKey: true,
        type: Sequelize.STRING(100)
      },
      dispName: {
        type: Sequelize.STRING(100) // modified: was just plain STRING
      },
      email: {
        type: Sequelize.STRING(100) // modified: was just plain STRING
      },
      phoneNum1: {
        type: Sequelize.STRING(15) // modified: was just plain STRING
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Users');
  }
};

и модель Role (со связанным файлом миграции, созданным sequelize-cli):

'use strict';
module.exports = (sequelize, DataTypes) => {
    const Role = sequelize.define('Role', {
        name: DataTypes.STRING
    }, {});
    Role.associate = function (models) { // associations added manually
        Role.belongsToMany(models.User, { through: 'UserRoles', foreignKey: 'roleId' });
    };
    return Role;
};

вот сгенерированный файл миграции для Role:

'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Roles', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      name: {
        type: Sequelize.STRING(100), // modified: was just plain STRING
        unique: true // Added manually
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Roles');
  }
};

Когда я запускаю sequelize-cli db:migrate, таблица UserRoles не создается. Это почему?

Страница Ассоциации руководства Sequelize, кажется, предполагает, что определение ассоциаций в файле модели это все, что требуется ...

Исследовать:


person markvgti    schedule 10.02.2020    source источник
comment
показать сгенерированные миграции   -  person Anatoly    schedule 10.02.2020
comment
Обновлено с помощью файлов миграции @Anatoly.   -  person markvgti    schedule 11.02.2020
comment
не вижу никаких ролей пользователя в миграциях. Как вы их создали?   -  person Anatoly    schedule 11.02.2020
comment
Именно так: я ожидал, что UserRoles будет волшебным образом сгенерирован с помощью sequelize. В конце концов, я закончил писать UserRoles файл миграции вручную.   -  person markvgti    schedule 13.02.2020
comment
Обычно мы делаем то же самое. Но вы можете написать модель для UserRoles и сгенерировать из нее миграцию.   -  person Anatoly    schedule 13.02.2020