我很难让我的查询从使用 Sequelize 的查询中返回所有“子项”。
我有两个型号
Offer
和Tag
。这些模型通过连接表 offer_tags
(模型 OfferTags
)具有多对多关系,并且具有列 id
、offer_id
、tag_id
。我不使用sequelize为我创建模式,但仅作为ORM工具,因此我创建了表的模型并创建了多对多关系,例如:
Offer.belongsToMany(Tag, { through: OfferTags });
Tag.belongsToMany(Offer, { through: OfferTags });
我正在尝试创建一个查询来获取报价,通过使用标签 ID 执行 IN 子句来获取仅包含特定标签的订单来过滤报价。我可以执行此操作,但是只要任何标签 id 与 IN 子句中的 id 匹配,我就想返回商品及其所有标签,但查询仅返回 IN 子句中匹配的标签,而不是全部其中。这是我当前的查询:
return await Offer.findAll({
include: [
Customer,
{
model: Tag,
where: {
id: {
[Op.in]: [1, 2, 3, 4, 5]
}
},
through: {
attributes: []
}
}
]
});
客户包含只是报价和客户之间的另一种多对一关系(如果重要的话)。但是,此查询仅返回标签 id 为 IN
[1, 2, 3, 4, 5]
的标签,并且我试图让它返回报价及其标签的 ALL(如果任何标签包含在 IN 子句中)。我也正在使用 PostgreSQL 数据库。有什么建议吗?
尝试下面修改后的 Sequelize 查询,我修改了检索具有至少一个指定标签的商品的方法,同时还包括这些商品的所有关联标签。我没有直接在
include
的 Tag
子句中应用过滤器(这会将返回的标签限制为仅与指定 ID 匹配的标签),而是将过滤条件移至外部查询级别。这是使用 '$Tags.id$'
子句中的特殊 Sequelize 语法 where
来完成的,该语法根据任何指定标签 ID 的存在来过滤报价。 include
的 Tag
子句保留,没有 where
条件。
return await Offer.findAll({
include: [
Customer,
{
model: Tag,
through: {
attributes: []
}
}
],
where: {
'$Tags.id$': {
[Op.in]: [1, 2, 3, 4, 5]
}
},
subQuery: false
});