Недавно я переключился с «обычного» сиквела на миграцию с сиквелизом-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)
? Это тоже кажется странным.
Должно быть, я делаю что-то не так, используя эти модели, пожалуйста, дайте мне знать, что делать по-другому.
models
, который содержитindex.js
, где вызываются все ассоциации! Если вы напишете ответ с этим, я отмечу его как принятый. - person konse   schedule 05.01.2019