【问题标题】:How to limit joined rows (many-to-many association) in Sequelize ORM?如何限制 Sequelize ORM 中的连接行(多对多关联)?
【发布时间】:2016-03-11 04:34:29
【问题描述】:

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

【问题讨论】:

    标签: javascript node.js sequelize.js


    【解决方案1】:

    我知道这个问题很老,但对于那些仍然遇到这个问题的人,有一个简单的解决方法。

    由于 Sequelize 将 custom methods 添加到关联模型的实例中,您可以将代码重组为如下所示:

    const tag = await Tag.findOne({ where: { url: req.params.url } });
    const tagPosts = await tag.getPosts({ limit: 10 });
    

    这将与您的代码完全相同,但可以进行限制和偏移。

    【讨论】:

      【解决方案2】:

      这里有同样的问题。根据我收集到的信息,要使用限制/偏移量,您需要 include.separate,它尚不支持 belongsToMany 关联,因此在本文发布时不支持您尝试执行的操作。

      已经有人在处理它,你可以跟踪它 here.

      【讨论】:

        猜你喜欢
        • 2022-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-05
        相关资源
        最近更新 更多