Sequelize:使用 set<Association> 创建 join table 属性

Sequelize: Create join table attribute with set<Association>

我正在使用 Sequelize 4.38.0,但是 belongsToMany 关联有问题。

我这样定义 table:

const Role = db.define('role', {
  name: {type: Sequelize.STRING, allowNull: false},
  standard: {type: Sequelize.BOOLEAN, allowNull: false}
})

const Privilege = db.define('privilege', {
  id: {type: Sequelize.STRING, allowNull: false, primaryKey: true},
  description: {type: Sequelize.TEXT, allowNull: false}
})

const RolePrivilege = db.define('rolePrivileges', {
  restriction: {type: Sequelize.STRING, allowNull: true}
})

Privilege.belongsToMany(Role, {through: RolePrivilege})
Role.belongsToMany(Privilege, {through: RolePrivilege})

所以代码说一个权限可以有很多角色,一个角色也可以有很多权限-所以它是一个n:m关联。

就像你在上面看到的那样,我通过 table RolePrivilege 创建了那个关联,它有一个额外的属性 restriction.

当我想给角色添加权限时,我通常这样做:

Role.build({id: role}).setPrivileges(privileges)

其中 privileges 只是一组权限 ID。 所以我现在想将联接 table (RolePrivileges) 中的 restriction 字段填充为一个特殊值 对于角色关联的每个权限

所以我尝试了下面描述的方法 here

privileges = privileges.map(p => {
    const priv = Privilege.build({id: p})
    priv.rolePrivileges.restriction = 'a'
    return priv
  })

并进行了与上述相同的查询。但它会抛出无法在 undefined 上设置 restriction 的错误。经过长时间的 google 会话后,我尝试在 build 方法中包含关联 table,但它仍然不起作用。

你能帮我吗?

有时错误仍然出现在屏幕前。 我看错了文档。

而不是写以下内容:

priv.rolePrivileges.restriction = 'a'

之前我只需要创建关联对象:

priv.rolePrivileges = {
  restriction: 'a'
}

也许我可以帮助别人。