sequelize:创建具有set< association>

w8rqjzmb  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(245)

我使用的是Sequelize4.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})

所以代码说一个特权可以有很多角色,一个角色也可以有很多特权——所以它是一个n:m关联。
就像你在上面看到的,我通过表创建了这个关联 RolePrivilege 它还有一个附加属性 restriction .
当我想给角色添加权限时,我通常是这样做的:

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

哪里 privileges 只是特权id的数组。所以我现在想填补 restriction 联接表中的字段( RolePrivileges )为每个特权到角色关联指定一个特殊值。
所以我尝试了下面描述的方法

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

像上面一样做了同样的查询。但是它抛出了一个错误 restriction 在未定义上是不可能的。在一个长时间的google会话之后,我尝试将关联表包含在 build 方法,但仍然不起作用。
你能帮我吗?

u0njafvf

u0njafvf1#

有时错误仍然摆在屏幕前。我把文件看错了。
而不是写以下内容:

priv.rolePrivileges.restriction = 'a'

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

priv.rolePrivileges = {
  restriction: 'a'
}

也许我能帮上忙。

相关问题