TypeORM:通过存储库API更新数据(带有关系)

时间:2018-10-20 10:46:31

标签: node.js typeorm

我有两个实体(表):用户角色。两个实体之间存在多对一关系(一个用户可以有一个角色,角色可以与多个用户相关)。现在,我想通过执行以下命令来更新用户实体(其中还可以包括用户角色的更新):

const user = await this.userRepository.preload(partialUser);
await this.userRepository.save(user);
return user;

预期行为

  1. partialUser(要更新的用户属性)与数据库中包含role的用户数据合并
  2. user(合并的对象)已保存到数据库
  3. 新用户对象返回给调用者(包括角色)

会发生什么

  1. 用户已合并,但未加载role(但如果我向role添加子属性partialUser,就可以了)
  2. user(合并对象)保存到数据库(如果它是role的一部分,也保存到数据库{
  3. 返回了新的用户对象,但是如果没有通过partialUser更新角色,则该角色丢失了

问题

为什么partialUser之后role既不通过preload也不通过return加载? TypeORM存储库是不是为建立关系而设计的不好,还是我使用不正确?

我的解决方法

此刻,我必须在保存整个save实体后再次读取它,以便可以将完整的对象(包括user关系)返回给调用者。我认为那不是很有效。是这样吗?

role

1 个答案:

答案 0 :(得分:1)

TypeORM支持此类用例。您可以使用预加载标志(即eager: true)来完成此操作,您可以将其设置为该关系。现在,每次获取该记录时,默认情况下都会获取该关系并在响应中返回。您可以在用户模型中使用的示例代码:

@ManyToMany(type => Role, role => role.User, {
  eager: true
})
public roles: Role[];