【问题标题】:sequelize - Where clause with associationssequelize - 带有关联的 Where 子句
【发布时间】:2014-11-07 19:07:44
【问题描述】:

在 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 来实现。

【问题讨论】:

    标签: javascript node.js orm sequelize.js


    【解决方案1】:

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

    类似的东西:

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

    【讨论】:

    • 这个问题是不可能让我们说按字母顺序排列的前 20 个用户(组合)。因为用户是板子的一个子集,所以您不能将它们限制或排序为一个组。
    • @MarcMailhot 是的,它非常有限。看起来您实际上可以过滤急切获取的行,但似乎没有办法通过这些急切获取的行来过滤结果。
    • 看来我最终可能只是手动编写 SQL。我试了一下,它似乎有效,只是有点不方便/笨重/丑陋。
    【解决方案2】:

    回复很晚,但也有同样的问题,这就是我如何让它在 Sequelize 3.24.0 中工作(类似这样);

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

    【讨论】:

      猜你喜欢
      • 2019-08-18
      • 2014-11-02
      • 2018-07-21
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      相关资源
      最近更新 更多