我有一个带有两个表Foo
和Bar
的Sequelize设置。他们每个人都有一个相互关联的关系。
Foo.belongsToMany(Bar, {through: 'foo_bars'});
Bar.belongsToMany(Foo, {through: 'foo_bars'});
现在,我有一些与许多酒吧相关联的foo。但是我有一些特定的酒吧,我想找到与所有这些酒吧相关联的所有foo,但仅限于这些酒吧。
bars = [wineBar, beerBar];
const wineAndBeerBarFoo = await Foo.findAll({
where: {
// ?
},
include: [{
model: Bar,
where: {
// id: {[Sequelize.Op.all]: [wineBar.id, beerBar.id]}
}
}]
});
我尝试了一些变体,但是我在include块的where处注释的东西显然是不正确的,因为它将查找与ID为啤酒和红酒酒吧ID数组的酒吧关联的foo。是不可能的。
我并没有真正找到完成文档中所寻找内容的方法。我总是可以手动浏览FooBars表,但是想知道是否还有一种更惯用的方法。谢谢!
答案 0 :(得分:0)
您应该在where
对象中放置through
子句。我尝试对Op.all
使用您的条件,但得到SequelizeDatabaseError: malformed array literal
,所以在我的版本中all
条件被破坏了(我使用sequelize 5.8.5
)。也许尝试一些不同的查询方法(也许Op.and
)。但是基本原理是这样的:
const wineAndBeerBarFoo = await Foo.findAll({
include: [{
model: Bar,
required: true,
through: {
where: {
BarId: {[Sequelize.Op.eq]: wineBar.id }
}
}
}
]
});