Я недавно переключился с "нормального" sequelize на миграции с sequelize-cli. Использование cli до сих пор работало нормально. Но я не уверен, как использовать созданные модели. В частности, кажется, что, как я это делаю, у меня проблемы с ассоциациями. Они правильно созданы в базе данных, но в коде я получаю ошибки типа Upvote is not associated to Video
Я создал модели с помощью cli и попытался импортировать и использовать их.
Это фрагмент модели video
, сгенерированной командой cli:
module.exports = (sequelize, DataTypes) => {
const Video = sequelize.define('Video', {
userid: DataTypes.STRING,
...
}, {});
Video.associate = function(models) {
Video.hasMany(models.Upvote, { foreignKey: 'videoid', sourceKey: 'id' });
};
return Video;
};
Вот фрагмент миграции:
let videos = function (queryInterface, Sequelize) {
return queryInterface.createTable('Videos', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
userid: {
type: Sequelize.STRING,
references: {
model: 'Users',
key: 'id'
},
},
...
});
};
Это способ импорта моделей:
const Video = require('../models/video')(dbConnector.sequelize, Sequelize.DataTypes);
Я нахожу немного странным, что мне нужно пропустить sequelize
и DataTypes
, так как в этом не было необходимости, когда я сам строил модели. Это правильный способ их импорта?
Когда я их импортирую, ошибки нет, и я могу запросить их как Videos.findAll()
, но ассоциации не работают. И я не уверен, как заставить их работать, мне нужно самому вызывать функцию Video.associate(models)
? Это тоже кажется странным.
Должно быть, я что-то не так делаю, когда использую эти модели, пожалуйста, дайте мне знать, что делать по-другому.