首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >class-transformer:序列化typeorm多对一关系

class-transformer:序列化typeorm多对一关系
EN

Stack Overflow用户
提问于 2020-06-28 17:43:47
回答 1查看 1.2K关注 0票数 2

我有这样一门课:

代码语言:javascript
复制
import {Column, Entity, ManyToOne, PrimaryGeneratedColumn} from "typeorm";
import {Company} from "./company.entity";
import {classToPlain, Expose, Transform, Type} from 'class-transformer';

@Entity()
export class Space {

  @PrimaryGeneratedColumn('uuid')
  id?: string;

  @ManyToOne(() => Company)
  @Expose()
  @Type(() => Company)
  @Transform(async value => {
    const res = await value;
    console.log(res);
    return res;
  })
  company!: Promise<Company>;

  @Column()
  name!: string;

}

这是为Company准备的

代码语言:javascript
复制
@Entity()
export class Company {

  @PrimaryGeneratedColumn('uuid')
  id?: string;

  @Column()
  name!: string;

  @OneToMany(() => Space, space => space.company, {
    cascade: true
  })
  spaces!: Promise<Space[]>;

}

由于某些原因,Company总是作为空间对象中的一个空对象返回,如下所示:

代码语言:javascript
复制
[
    {
        "id": "266F2B95-69AE-EA11-96D2-28187800655A",
        "name": "Main",
        "desks": 2,
        "company": {}
    }
]

即使console.log吐出

代码语言:javascript
复制
Company {
  id: '09A8FB3E-C5AB-EA11-96D2-28187800655A',
  name: 'Name' }

我在这里做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2020-10-13 05:55:47

类转换器同步调用转换函数。你必须使用一个热切的关系:

代码语言:javascript
复制
  @ManyToOne(() => Company, { eager: true })
  company!: Promise<Company>;

或在之后加载属性,如下所示:

代码语言:javascript
复制
export class Space {
  ...
  loadedCompany: Company
  ...
}

...

  for (const space of spaces) {
     space.loadedCompany = await space.company
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62620807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档