У меня есть модель 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, кажется, предполагает, что определение ассоциаций в файле модели это все, что требуется ...
Исследовать:
- Кажется, я сделал то, что предлагается в этом ответе на вопрос Sequelize без создания столбцов ассоциации моделей, но, похоже, у меня это не работает (ответ также не принимается).
- Не совсем то, что мне нужно: Запросы ассоциативных таблиц в Sequelize
- И это тоже: Как использовать таблицу ассоциаций?
UserRoles
будет волшебным образом сгенерирован с помощью sequelize. В конце концов, я закончил писатьUserRoles
файл миграции вручную. - person markvgti   schedule 13.02.2020