我有一个实例,我有用户和角色。我有以下内容:
var User = sequelize.define("Users", {
username: DataTypes.STRING,
password: DataTypes.STRING,
});
var Role = sequelize.define("Role", {
role: DataTypes.STRING
});
var UsersRole = sequelize.define("UsersRole");
User.belongsToMany(Role, {through: UsersRole});
使用UserId和RoleId列在DB中为数据库创建 UsersRoles 表。这一切都运行正常,但现在我希望能够更新用户角色,我无法解决如何做到这一点!到目前为止,我已经尝试过以下方面没有运气了:
models.Users.findAll({
where: { id: req.params.id },
include: [{ all: true }]
}).then(function(dbUser){
dbUser[0].Roles[0].updateAttributes({
RoleId: req.body.role,
},
{
where: { UserId : req.params.id }
}
).then(function (result) {...
总之,我想要做的就是能够更改用户角色,因此更新“ UsersRoles ”表并更改给定 RoleId >用户ID 即可。我似乎无法弄清楚如何通过任何续集语法进入 UsersRoles 表格!
我可以编写一些原始SQL,但感觉不对?
修改
如果表格包含:
,我只想更新用户角色| UserId | RoleId | ------------------- | 1 | 1 |
我希望能够将其更改为:
| UserId | RoleId | ------------------- | 1 | 2 |
但我无法弄清楚要执行此操作的代码!
答案 0 :(得分:3)
无需直接与联接表进行交互 - 您只需执行
即可user.setRoles([newRole]);
请注意,我正在传递数组,因为用户可以拥有多个角色 - set
会删除当前分配的所有角色。如果要添加新角色并保留现有角色,请使用
user.addRole(newRole);
答案 1 :(得分:0)
您正在更新RoleId
但尚未对其进行定义。如果您没有在表上定义主键,默认情况下Sequelize会根据id
按名称定义主键,因此您应该id: req.body.role
。