【发布时间】:2019-03-25 01:56:55
【问题描述】:
我有两个实体(表):users 和 roles。两个实体之间存在多对一的关系(一个用户可以拥有一个角色,角色可以与多个用户相关联)。现在我想通过执行以下命令来更新用户实体(也可以包括用户角色的更新):
const user = await this.userRepository.preload(partialUser);
await this.userRepository.save(user);
return user;
预期行为
-
partialUser(要更新的用户属性)与来自数据库的用户数据合并,包括role -
user(合并对象)保存到数据库 - 新的用户对象返回给调用者(包括角色)
会发生什么
- 用户被合并,但是
role没有加载(但是如果我给partialUser添加子属性role就可以了) -
user(合并对象)保存到数据库中(如果它是partialUser的一部分,也与role一起保存) - 返回新的用户对象,但如果角色未通过 partialUser 更新,则缺少角色
问题
为什么在save 之后没有通过preload 和return 加载role? TypeORM 存储库是否不适合关系,或者我使用不正确?
我的解决方法
目前我必须在保存后再次读取整个user实体,以便将完整的对象(包括role关系)返回给调用者。我认为那不是很有效。是这样打算的吗?
const user = await this.userRepository.preload(partialUser);
await this.userRepository.save(user);
return this.userRepository.findOne({
where: { id: user.id },
relations: ['role']
});
【问题讨论】: