序列化:使用set <association>

时间:2018-07-10 13:27:06

标签: javascript mysql sequelize.js has-and-belongs-to-many

我正在使用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方法中加入关联表,但仍然无法正常工作。

你能帮我吗?

1 个答案:

答案 0 :(得分:0)

有时错误仍然位于屏幕前面。 我看错了文档。

代替编写以下内容:

priv.rolePrivileges.restriction = 'a'

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

priv.rolePrivileges = {
  restriction: 'a'
}

也许我可以帮助某人。