首页 > 解决方案 > Sequelize:使用集合创建连接表属性

问题描述

我正在使用 Sequelize 4.38.0 并且我的 belongsToMany 关联有问题。

我这样定义我的表:

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

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

就像您在上面看到的那样,我通过RolePrivilege具有附加属性的表创建了该关联restriction

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

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

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

所以我尝试了如下描述的here

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

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

你能帮我解决这个问题吗?

标签: javascriptmysqlsequelize.jshas-and-belongs-to-many

解决方案


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

而不是编写以下内容:

priv.rolePrivileges.restriction = 'a'

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

priv.rolePrivileges = {
  restriction: 'a'
}

也许我可以帮助某人。


推荐阅读