Sequelize 中的 WhereHas 方法

Posted

技术标签:

【中文标题】Sequelize 中的 WhereHas 方法【英文标题】:WhereHas method in Sequelize 【发布时间】:2018-08-07 20:28:59 【问题描述】:

Sequelize 让我想起了 Laravel 中的 Eloquent 库,但我找不到类似于允许使用关联表过滤记录的方法 WhereHas 的任何东西。

假设我需要选择组中 ID = 1 的所有用户,然后我可以使用下面的查询,但是我必须从结果中提取用户。

let group = group.findOne(
  include: [
    as: 'users',
    model: schema.users
  ],
  where: 
    id: groupId
  
)

let users = group.users;

有没有像 WhereHas 这样的方法,我可以使用它来仅为用户创建查询,然后使用与组的关联来过滤它们?

let users = group.findAll(
  whereHas: [
    as: 'groups',
    model: schema.groups,
    where: 
      id: groupId      // something like this, group is used for filtering only
    
  ]
)

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,我的解决方案是包含选项中的required:true。如果要查找所有加入群组的用户,可以使用以下代码:

let users = users.findAll(
  include: [
    as: 'groups',
    model: schema.groups,
    required:true,
    where: 
      id: groupId      
    
  ],
)

【讨论】:

这对我不起作用。它仍然过滤所有在 id 上不匹配的行

以上是关于Sequelize 中的 WhereHas 方法的主要内容,如果未能解决你的问题,请参考以下文章

复数如何在 Sequelize 中工作?

Laravel Eloquent:如何通过 whereHas() 方法获取相关记录?

关联类方法中的现有字段 sequelize

Sequelize 中的 .sync() 到底是为了啥?

WhereHas Laravel 中的关系计数条件是啥

Laravel whereHas 检查嵌套关系中的最后一条最新记录