node.js - Sequelize 更新嵌套关联

标签 node.js sequelize.js

我有一个实例,其中有用户角色。我有以下内容:

  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 列的 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。我似乎不太明白如何通过任何 sequelize 语法访问 UsersRoles 表!

我可以写一些原始 SQL,但感觉不对?

编辑

我只想更新一个用户角色,如果表有:

| UserId | RoleId |
-------------------
|    1   |    1   |

我希望能够将其更改为:

| UserId | RoleId |
-------------------
|    1   |    2   |

但我不太明白执行此操作的代码!

最佳答案

不需要直接与连接表交互——你可以简单地做

user.setRoles([newRole]);

http://docs.sequelizejs.com/en/latest/api/associations/belongs-to-many/#setassociationsnewassociations-options-promise

请注意,我正在传递一个数组,因为用户可以拥有多个角色 - set 删除所有当前分配的角色。如果要添加新角色并保留现有角色,请使用

user.addRole(newRole);

关于node.js - Sequelize 更新嵌套关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37947290/

相关文章:

javascript - 文件夹中动态添加图像的幻灯片

javascript - Node.js 代码仅在带有 Sequelize 的文件顶部工作

node.js - Sequelize Giving 错误 - if (dialectTypes[type.key]) { ^ TypeError : Cannot read property 'key' of null

javascript - 如何创建一个 Sequelize 模型实例,而不将其保存在数据库中?

node.js:使用用户定义的id在elasticsearch中进行数据索引

javascript - 连接到我的 Visual Studio Online API 返回 HTTP 302

electron - 导入sequelize时的循环依赖

postgresql - Sequelize.js:查询不在数组中(数组中的项目为 $ne)

javascript - node.js 返回 GMT 时间而不是 "new Date()"的本地时间。那是一个错误吗?

javascript - 要上传文件,在 post body 与 multipart/form-data 中发送 base64 的优缺点是什么