如何使用节点打字稿更新类型 ORM 中的一对一关系

问题描述

我有两个实体,一个Filter,另一个Dataset,两者都有一一关系 让我知道如何使用 Repository on promise 根据数据集更新过滤器实体 代码写在node.ts上 我的 API 调用.put('/dataset/:id/filter')

      `@Entity('dataset')
export class DatasetEntity {
  @PrimaryGeneratedColumn('increment')
  id!: number
  @Column()
  program!: string
  @Column()
  description!: string
  @Column()
  name!: string
}
@Entity('filter')
export class FilterEntity {
  @PrimaryGeneratedColumn('increment')
  id!: number
  @Column({ type: 'json' })
  attributes!: { [key: string]: any }
  @OnetoOne(() => DatasetEntity)
  @JoinColumn()
  dataset!: DatasetEntity
}`

解决方法

你可以这样做。

const filterRepo = getRepository(FilterEntity);
    const savedFilter = await filterRepo.findOne({
        //Choose one according your situation
        id: req.params.id //if id comming from params is filter id,dataset: req.params.id //if id comming from params is filter id        
    });
    if(!savedFilter.dataset)
       throw "Data set not found";
    //Now pass the updated value like
    savedFilter.attributes = req.body.attributes;
    await filterRepo.save(savedFilter);

您可能需要在过滤器存储库中更改一件事

 @OneToOne(() => DatasetEntity)
  @JoinColumn({name: "id"})
  dataset!: DatasetEntity