sequlize如何新增多个create()
发布于 5 年前 作者 1134506391 2896 次浏览 来自 问答

新增一个成功


            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 回复

有一个不错的解决办法

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

forEach循环 + await 不可靠

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

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

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

bulkCreate 应该可以吧

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

回到顶部