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"