Sequelize [Op.and] 不与 M:N 关联一起工作
Sequelize [Op.and] not working with M:N association
我有两个模型
通过 unit_filter table
与 M:N 关联相关的单位和过滤器
this.belongsToMany(Unit, {
through: "unit_filter",
as: "units",
});
this.belongsToMany(Filter, {
through: 'unit_filter',
as: 'filters',
});
目标是获取具有超过 1 个关联过滤器和条件的单元。
let result = await Unit.findAll({
include: [
{
model: Filter,
where: {
id: {
[Op.and] : [2,252,4,80]
}
},
as: 'filters',
},
],
});
只有当数组中只有一个没有任何意义的 id 时,上面的方法才有效。
序列化文档状态
Post.findAll({
where: {
[Op.and]: [{ a: 5 }, { b: 6 }], // (a = 5) AND (b = 6)
}
})
所以我的代码理论上应该可以工作。我也试过
where: {
[Op.and] : [{id:2},{id:252},{id:4},{id:80}]
}
这导致从数据库中获取所有项目。在这种情况下,它甚至不关心 where 条件。
如果有人指出正确的方向,将会有很大帮助。
您需要将 Sequelize.literal
与 where
选项中的子查询一起使用,以便过滤具有多个过滤器的单元,因为只需指示多个过滤器 ID,您将获得具有以下之一的单元指定过滤器(从 1 到 N)。
let result = await Unit.findAll({
where: Sequelize.where(
Sequelize.literal('(SELECT COUNT(*) FROM unit_filter as uf WHERE uf.unit_id=unit.id AND uf.filter_id in ($filter_ids))'),
Op.gt,
'1'),
bind: {
filter_ids: [2,252,4,80]
}
});
我有两个模型
通过 unit_filter table
与 M:N 关联相关的单位和过滤器 this.belongsToMany(Unit, {
through: "unit_filter",
as: "units",
});
this.belongsToMany(Filter, {
through: 'unit_filter',
as: 'filters',
});
目标是获取具有超过 1 个关联过滤器和条件的单元。
let result = await Unit.findAll({
include: [
{
model: Filter,
where: {
id: {
[Op.and] : [2,252,4,80]
}
},
as: 'filters',
},
],
});
只有当数组中只有一个没有任何意义的 id 时,上面的方法才有效。
序列化文档状态
Post.findAll({
where: {
[Op.and]: [{ a: 5 }, { b: 6 }], // (a = 5) AND (b = 6)
}
})
所以我的代码理论上应该可以工作。我也试过
where: {
[Op.and] : [{id:2},{id:252},{id:4},{id:80}]
}
这导致从数据库中获取所有项目。在这种情况下,它甚至不关心 where 条件。
如果有人指出正确的方向,将会有很大帮助。
您需要将 Sequelize.literal
与 where
选项中的子查询一起使用,以便过滤具有多个过滤器的单元,因为只需指示多个过滤器 ID,您将获得具有以下之一的单元指定过滤器(从 1 到 N)。
let result = await Unit.findAll({
where: Sequelize.where(
Sequelize.literal('(SELECT COUNT(*) FROM unit_filter as uf WHERE uf.unit_id=unit.id AND uf.filter_id in ($filter_ids))'),
Op.gt,
'1'),
bind: {
filter_ids: [2,252,4,80]
}
});