使用sequelize批量新增bulkCreate遇到的坑
提交数据为null:
新增数据:
[
{ user_id: 'f1aa4887673b40c992049e83db318102', role_id: 1 },
{ user_id: 'f1aa4887673b40c992049e83db318102', role_id: 2 }
]
结果:
Column ‘user_id’ cannot be null
转化的sql为:
INSERT INTO `dorm_admin_role` (`user_id`,`role_id`) VALUES (NULL,NULL),(NULL,NULL);
可以发现提交的数据在sql中都为null
原因:
新增数据的字段应该与model里面定义字段一致
model:
userId: {
type: DataTypes.STRING(100),
field: 'user_id',
primaryKey: true, // 主键
},
roleId: {
type: DataTypes.BIGINT,
field: 'role_id',
primaryKey: true, // 主键
autoIncrement: false, //自动增长
},
新增数据改为:
[
{ userId: 'f1aa4887673b40c992049e83db318102', role_id: 1 },
{ userId: 'f1aa4887673b40c992049e83db318102', role_id: 2 }
]
let role_list = []
roleData.forEach(role => {
role_list.push({
userId: id,
roleId: role
})
})
// 将新的角色信息加入进去 bulkCreate 批量新增
await AdminRoleModel.bulkCreate(role_list,[{fields: ['user_id', 'role_id']}]).catch(err => {
throw new MyError(SYSTEM_ERROR_CODE,err.message)
})
即可新增成功。