【问题标题】:Sequelize updating nested associations续集更新嵌套关联
【发布时间】:2016-06-21 14:32:18
【问题描述】:

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

  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});

这为我在数据库中创建了一个 UsersRoles 表,其中包含 UserId 和 RoleId 列。这一切都很好,但现在我希望能够更新用户角色,我不知道该怎么做!到目前为止,我已经尝试了以下方法,但没有成功:

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,但感觉不对?

编辑

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

|用户名 |角色 ID | ------------------ | 1 | 1 |

我希望能够将其更改为:

|用户名 |角色 ID | ------------------ | 1 | 2 |

但我无法弄清楚执行此操作的代码!

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    无需直接与连接表交互 - 您可以简单地做

    user.setRoles([newRole]);
    

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

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

    user.addRole(newRole);
    

    【讨论】:

    • 一些旁注:如果您只需要一个用户,请改用findOnefindById。另外,如果您不打算使用它们,则无需include: all
    【解决方案2】:

    您正在更新RoleId,但您尚未定义它。如果您没有在表上定义主键,默认情况下 Sequelize 会按名称定义主键,如果 id,那么您应该这样做 id: req.body.role

    【讨论】:

    • 实际上 'RoleId' 是作为关联的一部分在表中创建的,这是我想要更新的,sequelize 为我创建了表并且没有 'id' 列
    • 另一种更新角色的方式是这样的dbUser[0].Roles[0].RoleId = req.body.role; dbUser[0].Roles[0].save();。还有为什么你需要第二个 where 条件 first where 条件将负责过滤用户。
    • 感谢您的回答,我试过了,但它仍然无法正常工作,我担心我正在尝试破解这个问题,实际上有一种“续集”的方式来做到这一点我应该尝试一下吗?
    • 抱歉,我认为我解释得不够清楚......它不是我要更新的角色,是 UserRoles 表,所以哪个用户与哪个角色相关联。跨度>
    猜你喜欢
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    相关资源
    最近更新 更多