我有以下型号:
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 | Foo |
2 | 条形图 |
3 | Baz |
如果将id作为变量传递,一种选择是只使用users
和user_message_groups
表。
首先,您需要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')
});