sequelize-带有关联的Where子句

sequelize - Where clause with associations

本文关键字:Where 子句 关联 sequelize-      更新时间:2023-09-26

在sequelize中,我设置了板和用户,具有如下所示的多对多关联

User.hasMany(Board, {through: BoardUsers});
Board.hasMany(User, {through:BoardUsers});

不管怎样,使用where子句,我可以找到属于某个板列表的用户。例如,假设我有3个板,我想找到属于板1或板3的前20个用户(使用默认排序顺序)。有没有一种方法可以做到这一点,而不需要对每个板执行单独的查找,然后手动组合结果。

我希望能够做一些类似的事情:

User.findAll({where:{board: [1,3]}});

但我似乎找不到办法。

据我所知,等效的SQL应该是这样的:

SELECT * FROM `users` WHERE id IN (SELECT userID FROM boardusers WHERE boardId IN (1,3))

但我希望能够通过ORM来完成这项工作。

虽然我不确定您是否可以直接执行此操作,但您始终可以查询Boards并急切地获取用户。

大致如下:

Board.findAll({where: {id: [1,3]}}, { include: [ User ] })

回复很晚,但只是有同样的问题,下面是我如何在Sequelize 3.24.0中使用它(类似这样的东西);

User.findAll({ include: [{ model: Board, where: { $in: [1,3] }}] });