【发布时间】:2019-05-31 16:39:19
【问题描述】:
我最近从“正常”续集切换到使用 sequelize-cli 迁移。到目前为止,使用 cli 效果很好。但我不确定如何使用生成的模型。特别是我这样做的方式似乎与协会有问题。它们是在数据库中正确创建的,但是在代码中我得到了Upvote is not associated to Video
我已经使用 cli 创建了模型并尝试导入和使用它们。
这是cli生成的video模型的sn-p:
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;
};
这里是迁移的 sn-p:
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) 函数吗?这似乎也很奇怪。
我在使用这些模型的方式上一定做错了,请让我知道该怎么做。
【问题讨论】:
-
我曾尝试在 Postgresql 中使用 sequelize 迁移和关联模型。看看这个,github.com/praveenkumar-outlook/Sequelize-Postgres-Service
-
噢,我明白了,你导入整个
models目录,其中包含一个index.js,所有关联都被调用!如果你用这个写一个答案,我会把它标记为接受。
标签: mysql node.js orm sequelize.js sequelize-cli