0

我有以下型号:

const users = sequelize.define('users', { /* definition */ }
const messageGroups = sequelize.define('message_groups', { /* definition */ }

它们是这样关联的:

models.messageGroups.belongsToMany(models.users, {through: 'user_message_groups'})
models.users.belongsToMany(models.messageGroups, {through: 'user_message_groups'})

如何返回不在具有特定 ID 的 messageGroup 中的用户列表?

例如,假设我的表看起来像这样

用户

ID 姓名
1
2 酒吧
3 巴兹

消息组

ID 姓名
1 行政
2 用户

user_message_groups

用户身份 消息组 ID
1 1
1 2
2 2

给定 1(管理员)的 message_groups id,我如何构造一个查询来返回不在该 message_group 中的两个用户?(应该返回用户BarBaz

4

1 回答 1

0

如果您将 id 作为变量传递,一种选择是使用 justusersuser_message_groupstable。

首先,您需要为user_message_groups.

const userMessageGroups = sequelize.define('user_message_groups', {
    userId: {
        type: DataTypes.INTEGER,
        allowNull: false
    },
    messageGroupId: {
        type: DataTypes.INTEGER,
        allowNull: false
    }
});

接下来,创建用户和 user_message_groups 表之间的关联。

models.users.hasMany(models.userMessageGroups);

然后使用独占 LEFT JOIN 进行查询。

models.users.findAll({
    include: {
        model: models.userMessageGroups,
        required: false,
        where: {
            messageGroupId: 1
        }
    },
    where: models.sequelize.literal('`user_message_groups.messageGroupId` IS NULL')
});
于 2021-06-14T05:14:25.100 回答