我最近从“普通”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)
我自己工作?这看起来也很奇怪。
我使用这些模型的方式一定是做错了什么,请告诉我该怎么做。
1条答案
按热度按时间ffscu2ro1#
sequelize cli将生成
index.js
内部models
包含以下代码的目录,在第一组代码中,它将导入所有模型,而在第二组代码中,它将根据内部配置的关联关联关联所有模型
associate
每个模型的方法。例如,在你的例子中
Video
以及Upvote
可以定义为,模特/视频.js
模型/upvote.js
希望这有帮助!!!