Sequelize 急切加载错误
Posted
技术标签:
【中文标题】Sequelize 急切加载错误【英文标题】:Sequelize Eager Loading Error 【发布时间】:2018-03-18 18:21:27 【问题描述】:我遇到了一个问题,即我的查询中的 include 不起作用,我不知道为什么。我有两个模型:问题和建议。
Question:
var Question = sequelize.define('Question',
,
classMethods:
associate: function (models)
// associations can be defined here
Question.belongsTo(models.User,
as: 'askerId',
foreignKey: 'askerId'
)
Question.belongsTo(models.User,
as: 'winnerId',
foreignKey: 'winnerId'
)
Question.hasMany(models.Suggestion)
Question.hasMany(models.TagQuestion)
)
建议:
var Suggestion = sequelize.define('Suggestion',
text: DataTypes.STRING
,
classMethods:
associate: function (models)
// associations can be defined here
Suggestion.belongsTo(models.Question,
foreignKey: 'questionId',
as: 'question'
)
Suggestion.belongsTo(models.User)
Suggestion.hasMany(models.Vote)
)
我尝试的查询在这里:
Question.findAll(
include: [
model: models.Suggestion
]
)
但我不断收到错误消息:SequelizeEagerLoadingError: Suggestion is not associated to Question!
为什么它们没有关联?它们在我的数据库中(基于我编写的迁移)。如果我目前做错了,我应该如何建立我的关联?我查看了其他有此问题的人,但无法弄清楚为什么我的关联是错误的。
【问题讨论】:
你用的是什么版本的sequelize?如果 gt v4 在主题 How sequelize works? 中看到我的答案(在 sequelize v4 中删除了 classMethods 和 instanceMethods) 是的,这很有帮助。我在连接表查询方面仍然存在一些问题(它已链接,但没有找到通过连接表链接的对象)。 更新您的问题,添加您实际所做的示例。什么类型的协会?或者您对所有类型都有错误?你遇到了什么错误? docs.sequelizejs.com/manual/tutorial/… 来自官方文档:如果关联有别名(使用 as 选项),则在包含模型时必须指定此别名。 【参考方案1】:我遇到了这个错误,因为我的语法不好。我正在使用
include:
model: db.modelOne,
model: db.modelTwo
没有括号 []。包括它解决了错误。 无论如何,mentioned docs 提供了这个更简洁的选项来递归地包含所有外国模型:
User.findAll( include: [ all: true, nested: true ]);
【讨论】:
为链接添加描述【参考方案2】:Sequelize 不再支持 classMethods。 classMethods 和 instanceMethods 被移除。
上一个:
const Model = sequelize.define('Model',
...
,
classMethods:
associate: function (model) ...
,
instanceMethods:
someMethod: function () ...
);
新:
const Model = sequelize.define('Model',
...
);
// 类方法
Model.associate = function (models)
...associate the models`enter code here`
;
参考:http://docs.sequelizejs.com/manual/tutorial/upgrade-to-v4.html#breaking-changes
【讨论】:
【参考方案3】:请查看您的init-models.js
,代码如下:
question.hasMany(suggestion, as: 'suggestion', foreignKey: 'questionId');
suggestion.belongsTo(question, as: 'question', foreignKey: 'questionId');
存在吗?
来自
"sequelize": "^6.6.2"
【讨论】:
以上是关于Sequelize 急切加载错误的主要内容,如果未能解决你的问题,请参考以下文章
在使用急切加载的 findOne Sequelize 方法期间,Nodejs 堆内存不足