问题描述
我尝试了 .save 和 .update 但它导致错误,--在 .save 的情况下,它返回错误: 重复键的值破坏了唯一约束 --在 .update 情况下它返回错误:“user”关系的“userId”列没有存在
//Many-to-many relation with user
@ManyToMany((type) => User,(user) => user.roles)
users: User[];
//Many-to-many relation with role
@ManyToMany((type) => Role,{
cascade: true,})
@JoinTable({
name: "users_roles",joinColumn: { name: "userId",referencedColumnName: "id" },inverseJoinColumn: { name: "roleId" }
})
roles: Role[];
源代码是: /* 数据示例 实体 2 = { 用户名:'user8', 密码:'user8', 名字:'测试', 姓氏:'tt',电子邮件:'user8@gmail.com', 公司: 18,角色:[ { id: 62 },{ id: 63 } ] } */
let entity = await this.userRepository.create(data.payload);
let entity2 = { ...entity,roles: data.payload.selectedRoles }
const user = await this.userRepository.save(entity2);
/*const user = await this.userRepository.update(id,entity2);*/
//todo we need to serialize the user
// return only what we need like username,email,...etc not password!!!!
return { success: true,user: SanitizeUser(user) };
解决方法
我先 findone 然后 .save,第 1 次使用 data= this.userRepository.findOne(id) 获取要更新的数据,然后您可以将 userRepository.save(data) 应用于此数据。例如:
const userUpdated = await this.userRepository.findOne(id)
let dataUpdated = {
...userUpdated,username: data.payload.username,firstname: data.payload.firstname,lastname: data.payload.lastname,email: data.payload.email,company: data.payload.selectedCompany,roles: data.payload.selectedRoles
}
const user = await this.userRepository.save(dataUpdated);