Sequelize,过滤了关于belongsToMany关联的连接模型的问题

时间:2017-08-15 03:11:44

标签: node.js database postgresql sequelize.js jointable

Sequelize文档建议您可以使用options对象上的以下参数过滤对连接表属性的查询: [options.include[].through.where]

我已尝试在下面的代码中使用此配方,并发现过滤无效。

模型用户和模型网络通过连接表网络关联关联,其具有附加属性(布尔)'已确认'。我似乎无法编写一个只返回与用户关联的已确认网络的查询。

我的代码摘录如下。

const network_affiliations = db.define('network_affiliations', {
    networkEmail: { type: Sequelize.STRING },
    confirmed: { type: Sequelize.BOOLEAN }
}, {
    freezeTableName: true,
    defaultScope: {
        where: {
            confirmed: true
        }
    },
});

// User belongs to many Networks and Networks belong to many Users (join table)
User.belongsToMany(Network, { through: network_affiliations });
Network.belongsToMany(User, { through: network_affiliations });

//querying to find one user, including their confirmed networks
User.findOne({
            where: {
                email: req.body.email
            },
            include: [{ model: Network, through: { network_affiliations: { where: { confirmed: true } } } }]
        })

我希望此查询返回具有关联网络的用户实例 - 但只返回已确认的网络:true。相反,我得到了与用户关联的所有网络(包括已确认:false和确认:未定义)。

正如您在上面的代码中所看到的,我尝试为连接表设置defaultScope({confirmed:true})。这似乎也没有做任何事情。

我还尝试了一个User.findAll查询,该查询在其他方面完全相同,但也不起作用。

我错过了什么,或者Sequelize只是不在这里工作?

Sequelize版本:" ^ 3.30.4"

0 个答案:

没有答案