CNode

sequlize如何新增多个create()

问答
11134506391发布于7 年前最后回复7 年前8 回复3879 浏览0 收藏

新增一个成功


            await this.ctx.model.RolePermission.create({
                role_id: 2,
                permission_id: 2
			)}

新增多个失败

            let id = body.roleId;
            let permissionId = body.access_node;
            console.log('wwwwww')
            console.log(id) //1
            console.log(permissionId) //[2,3,4]

            // 新增多个,失败
             permissionId.forEach(item => {
                 await this.ctx.model.RolePermission.create({
                     role_id: id,
                     permission_id: parseInt(item)
                 })
             })

查看回复

回复 (8)

F
fightAndLearn#2·7 年前

有一个不错的解决办法

  • 在role表设置associate
Role表
Role.associate = function(models) {
    models.Role.belongsToMany(models.Permission, {
      through: {
        model: models.RolePermission,
        unique: false
      },
      as: {
        singular: 'RolePermission',
        plural: 'RolePermissions'
      },
      foreignKey: 'fk_role_id',
      otherKey: 'fk_permission_id',
      constraints: false
    })
	}
  • 获取角色实例 const role = await db.Role.findById(roleId)
  • 事务updateOrCreate
await db.sequelize.transaction(t => {
        return role.setRolePermissions(permission_ids, { transaction: t })
      })
J
jacksparrow68#3·7 年前

forEach循环 + await 不可靠

1
1134506391#4·7 年前
引用 jacksparrow68forEach循环 + await 不可靠

@jacksparrow68 已经解决了谢谢,async(item)

H
HongYangHT#7·7 年前

bulkCreate 应该可以吧

J
jacksparrow68#8·7 年前
引用 1134506391@jacksparrow68 已经解决了谢谢,async(item)

@1134506391 好吧,你加一个async声明是可以的,但是我想说,forEach 里面用await可能不是你想的那样。https://www.jianshu.com/p/18a6d889769b

参与回复
登录后即可参与回复。登录