我正在使用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})
因此代码说明特权可以具有许多角色,角色也可以具有许多特权-因此它是n:m关联。
就像您在上面看到的那样,我通过表RolePrivilege
创建了该关联,该表具有一个附加属性restriction
。
当我想向角色添加特权时,通常这样做:
Role.build({id: role}).setPrivileges(privileges)
其中privileges
只是特权ID的数组。
因此,我现在想将联接表(restriction
)中的RolePrivileges
字段填充为特殊值,以获取每个特权与角色的关联。
所以我尝试了以下方法,如它描述的here
privileges = privileges.map(p => {
const priv = Privilege.build({id: p})
priv.rolePrivileges.restriction = 'a'
return priv
})
并执行与上述相同的查询。但这会引发错误:无法将restriction
设置为undefined。在经过长时间的Google会话后,我尝试在build
方法中加入关联表,但仍然无法正常工作。
你能帮我吗?
答案 0 :(得分:0)
有时错误仍然位于屏幕前面。 我看错了文档。
代替编写以下内容:
priv.rolePrivileges.restriction = 'a'
我只需要在之前创建关联对象:
priv.rolePrivileges = {
restriction: 'a'
}
也许我可以帮助某人。