顺序查询特定于belongsToMany关联

时间:2019-07-17 16:46:23

标签: node.js sequelize.js has-and-belongs-to-many

我有一个带有两个表FooBar的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表,但是想知道是否还有一种更惯用的方法。谢谢!

1 个答案:

答案 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 }
                }
            }
        }
    ]
});