【问题标题】: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'});

【问题讨论】:

  • 你能显示代码定义模型组和用户吗?

标签: mysql node.js sequelize.js


【解决方案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);
});

【讨论】:

    猜你喜欢
    • 2018-02-28
    • 2020-05-30
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 2018-12-09
    • 1970-01-01
    相关资源
    最近更新 更多