如何限制Sequelize ORM中的连接行(多对多关联)?

时间:2015-12-06 15:10:20

标签: javascript node.js sequelize.js

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”。如何解决这个问题?

2 个答案:

答案 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 });

这将与您的代码完全一样地工作,但可能会产生限制和抵消。