gpt4 book ai didi

mysql - Sequelize删除多个关联

转载 作者:行者123 更新时间:2023-11-28 23:28:34 24 4
gpt4 key购买 nike

您好,我有以下表格

models.User= sequelize.define("User", {
name: {
type: DataTypes.STRING, allowNull: false, unique: true
}
});
models.Group= sequelize.define("Group", {
name: {
type: DataTypes.STRING, allowNull: false, unique: true
}
});


db.User.belongsToMany(db.Group, {
"through": "UsersGroup"
});

db.Group.belongsToMany(db.User, {
"through": "UsersGroup"
});

有没有办法在给定组名和要删除的名称(用户)的情况下一次从组中删除多个用户?

喜欢:

var groupName = 'Work';

var users = ['Alice','Bob']

所以我需要删除工作组和{Alice and Bob}之间的关联

最佳答案

使用 "through": "UsersGroup" 将自动创建一个新的模型 UsersGroup,但它不会直接将其与 User 和 Group 相关联。所以我要做的是使用任何属性和键创建一个新的 Sequelize 模型 UsersGroup 并定义与用户和组的关联。然后,不是将“UsersGroup”字符串传递给 belongsToMany,而是直接将模型用作 db.UsersGroup。

models.UsersGroup = sequelize.define("UsersGroup", {});

db.UsersGroup.belongsTo(db.User);
db.UsersGroup.belongsTo(db.Group);
db.UsersGroup.findAll({attributes:['id'], include:[
{model: db.User, where: {name: {$in:['Alice','Bob']}}},
{mode: db.Group, where: {name: 'Work'}}
]}).then(function(toBeDeleted){
return db.UsersGroups.destroy({where:{id:{$in:toBeDeleted.map(function(d){ return d.id})}}})
}).then(function(){
....
}).catch(function(dbErr){throw err;})

您可能还想检查 if toBeDeleted.length > 0,因为我记得 sequelize 在传递空数组时表现得很有趣。

此外,如果您没有将 id 作为 usersgroup 表中的主键,您可以轻松修改上面的代码以使用 user_id 和 group_id 的组合 - 只需修改 where 语句即可。

另一种方法可以分别选择用户和组,并在 UsersGroups.destroy() 中使用结果集。但我更喜欢通过直通模型建立关联。

如果您要删除仅基于组名或用户名的关联,您可以使用 removeAssociationremoveAssociations 来完成此操作。有一个 looj here

关于mysql - Sequelize删除多个关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38238145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com