【问题标题】:Exclude User with specific role [Sequelize]排除具有特定角色的用户 [Sequelize]
【发布时间】:2022-09-23 02:08:09
【问题描述】:

我目前有

const User = db.define(
  \'users\',
  {
    id: {
      allowNull: false,
      autoIncrement: true,
      primaryKey: true,
      type: Sequelize.INTEGER
    },
    email: {
      type: Sequelize.STRING(255)
    },
   }
const UserRole = db.define(
  \'user_roles\',
  {
    id: {
      allowNull: false,
      autoIncrement: true,
      primaryKey: true,
      type: Sequelize.INTEGER
    }
  },
);
const Role = db.define(
  \'organization_roles\',
  {
    id: {
      allowNull: false,
      autoIncrement: true,
      primaryKey: true,
      type: Sequelize.INTEGER
    },
    roleName: Sequelize.STRING(255),
  },
);
User.belongsToMany(Role, {
  as: \'roles\',
  through: UserRole,
  foreignKey: \'userId\'
});
Role.belongsToMany(User, {
  as: \'organizationUsers\',
  through: UserRole,
  foreignKey: \'roleId\'
});

如何查询所有没有特定角色的用户?
例如:
User1 的角色:教师、监护人
用户 2 的角色:教师
我想查询角色中没有 Guardian 的用户 --> 我会得到 User2。

    标签: sequelize.js


    【解决方案1】:

    Sequelize 不支持开箱即用的NOT EXISTS 条件。所以你需要使用Sequelize.whereSequelize.literal 来构造一个带有普通SQL 的自定义条件。像这样的东西:

    const users = User.findAll({
      where: Sequelize.where(Sequelize.literal(`(SELECT COUNT(*) FROM user_roles as uroles
    join organization_roles as oroles on uroles.role_id=oroles.id
    where uroles.user_id=users.id and oroles.name=$name)`), '=', 0),
      bind: {
        name: 'Guardian'
      }
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-10
      • 2016-07-13
      • 2017-11-02
      • 2014-08-31
      • 1970-01-01
      • 2012-02-24
      • 2010-12-22
      • 2019-06-16
      相关资源
      最近更新 更多