续集在关联模型上的位置

Posted

技术标签:

【中文标题】续集在关联模型上的位置【英文标题】:sequelize where on assosiated model 【发布时间】:2019-07-26 11:36:59 【问题描述】:

我有三个模型用户、组、用户组。 User 和 Group 通过 UserGroup 模型具有多对多的关系。 我想获得包含所有组成员的组,但也只想要用户所属的那些组。这是我的续集查询。

        Group.findAll(
            include: ['members'],
            where: 
                '$members.id$': user_id
            
        );

使用上面代码中的 where 条件,组会根据 user_id 进行过滤。 IE。它返回与 ID 等于 user_id 的用户模型相关的组。但是这个查询并没有给出所有成员。它只返回一个 id 等于 user_id 的用户。这意味着“where”条件不仅过滤组,还过滤组成员。

这是我的联想

Group.hasMany(UserGroup, as: singular: 'usergroup', plural: 'usergroups', foreignKey: 'group_id');
Group.belongsToMany(User, as: singular: 'member', plural: 'members', through: UserGroup);

UserGroup.belongsTo(User, as: 'member', foreignKey: 'user_id');
UserGroup.belongsTo(Group, as: 'group', foreignKey: 'group_id');

【问题讨论】:

你能显示代码定义模型组和用户吗? 【参考方案1】:

你可以试试并告诉我:)

Group.findAll(
  include: ['members'],
  where:
      id: 
          $in: sequelize.literal(`(select distinct group_id from usergroup where user_id = $user_id)`)
      
  
)
.then(results => 
  console.log(results);
)
.catch(err => 
  console.log('err', err);
);

【讨论】:

以上是关于续集在关联模型上的位置的主要内容,如果未能解决你的问题,请参考以下文章

通过模型关联对nodejs进行续集

续集关联 On 或 ON

续集限制包括关联

如何在node.js中拥有多个关联/条件/包含在findAll上的续集

用包含关联续集 findOrCreate

如何在没有额外查询的情况下删除续集中的关联?