javascript - 在 typeorm express 中多对多更新数据
问题描述
我尝试了.save和.update但它会导致错误,--在.save的情况下它返回错误:重复键的值打破了唯一约束--在 .update的情况下它返回错误:“userId” “用户”关系的列不存在
注意:我有 2 个表角色和用户以及关联 user_role
//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',名字:'test',姓氏:'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,第一次使用 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);
推荐阅读
- angular - Angular MatDialog'bootstrap'没有显示正确或丢失
- typescript - 导入图片时TS无法从node_modules中找到模块
- c - 使用 C 语言计算该短语中每个单词的出现次数
- reactjs - 将下拉组件添加到材料表操作
- python - 如果数据框中字符串的第 n 个字符是某个字符,则删除该行
- javascript - 如何在Javascript中确定数组对象中的前2条记录
- php - 如何处理 .env 变量中的 %kernel.project_dir%?
- javascript - 如何设置侧导航栏菜单的活动类?
- vba - dbOpenDynaset - '对象变量或未设置块变量'
- pandas - 带有 2 个参数的 Pandas 函数来查找阈值