Sequelize定义了两种模式:Post和Tag,具有多对多关联。
Post.belongsToMany(db.Tag, {through: 'post_tag', foreignKey: 'post_id', timestamps: false});
Tag.belongsToMany(db.Post, {through: 'post_tag', foreignKey: 'tag_id',timestamps: false});
在“标记”页面上,我想获取标记数据,相关帖子并使用分页显示它们。所以我应该限制帖子。但如果我尝试将它们限制在“包含”
中Tag.findOne({
where: {url: req.params.url},
include: [{
model : Post,
limit: 10
}]
}).then(function(tag) {
//handling results
});
我收到以下错误:
Unhandled rejection Error: Only HasMany associations support include.separate
如果我尝试切换到“HasMany”关联,我会收到以下错误
Error: N:M associations are not supported with hasMany. Use belongsToMany instead
从另一方面,文档说限制选项“仅支持include.separate = true”。如何解决这个问题?
答案 0 :(得分:1)
这里有同样的问题。从我收集的内容到使用限制/偏移量,你需要include.separate,这对于belongsToMany关联还不支持,所以在这篇文章发表时你不支持你想要做的事情。
已经有人在处理它,你可以跟踪它 here
答案 1 :(得分:0)
我知道这个问题很旧,但是对于仍然遇到此问题的人,有一个简单的解决方法。
由于Sequelize将custom methods添加到关联模型的实例中,因此您可以将代码重新组织为以下形式:
const tag = await Tag.findOne({ where: { url: req.params.url } });
const tagPosts = await tag.getPosts({ limit: 10 });
这将与您的代码完全一样地工作,但可能会产生限制和抵消。