TypeORM 更新实体/表

Posted

技术标签:

【中文标题】TypeORM 更新实体/表【英文标题】:TypeORM updating entity/table 【发布时间】:2018-09-10 18:31:59 【问题描述】:

这是我的用户实体:

@PrimaryGeneratedColumn()
userId: number;

@Column(type:"varchar", length:"300")
userName: string;

@OneToOne(type => UserProfile, cascadeAll:true)
@JoinColumn()
userProfile: UserProfile;

@OneToOne(type => UserCredential, cascadeAll:true, eager:true)
@JoinColumn()
userCredential: UserCredential;

@OneToOne(type => BusinessUnit, cascadeAll:true)
@JoinColumn()
businessUnit: BusinessUnit;

@ManyToMany(type => ProductCategory)
@JoinTable()
productCategory: ProductCategory[];

这是我要更新的新数据:

User 
  userName: 'qweret@gmail.com',
  userProfile: 
   UserProfile 
     firstName: 'dcds',
     lastName: 'Faiz',
     mobile: '42423423',
     addressLine1: 'Delhi',
     addressLine2: 'Delhi',
     city: '-',
     country: '-',
     zipCode: '234243',
     homeTelephone: '-',
     dayOfBirth: 0,
     monthOfBirth: 0,
     yearOfBirth: 0 ,
  userCredential: UserCredential  credential: 'abcd@123'  

我正在按用户 ID 搜索用户。

return await getManager()
               .createQueryBuilder(User, "user")
               .where("user.userId = :id", id)
               .getOne();

上面的查询给了我结果:

User 
  createdDate: 2018-03-29T06:45:16.322Z,
  updatedDate: 2018-04-01T06:28:24.171Z,
  userId: 1,
  userName: 'qweret@gmail.com' 

我想更新我的用户表及其相关表

manager.save(user)

将在表中插入新行,而不是更新现有行。有没有办法在不手动更新每一列的情况下更新整个用户表及其相关表? 我不想像这样执行这个任务:

let user = await userRepositiory.findOneById(1);
user.userName = "Me, my friends and polar bears";
await userRepository.save(user);

let userProfile = await userProfileRepository.findOneById(1);
 userProfile.firstName = "";
 userProfile.lastName = "";
    ....// etc
 await userRepository.save(userProfile);

 // and so on update other tables.

【问题讨论】:

您好,您找到解决问题的方法了吗? 更新方法需要一个查找条件(可以是 id),所以它现在可以更新哪一行 【参考方案1】:

试试这个方法:

await this. userRepository.update(
                user.id ,
                user
              );

const updatedUser = await this.repository.findOne(user.id);            

【讨论】:

以上是关于TypeORM 更新实体/表的主要内容,如果未能解决你的问题,请参考以下文章

Typeorm - 无法更新实体,因为实体中未设置实体 ID

如何使用 typeorm 实体在 mysql 中使用现有表?

TypeOrm 不会在更新时保存实体及其关系

TypeORM/MySQL:无法删除或更新父行:外键约束失败

使用 TypeOrm 中的关系更新表

TypeORM 对将两个表映射在一起的表进行 COUNT 查询