【问题标题】:class-transformer: serialize typeorm manytoone relationclass-transformer:序列化 typeorm manytoone 关系
【发布时间】:2020-10-18 14:15:24
【问题描述】:

我有这门课:

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


@Entity()
export class Company {

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

  @Column()
  name!: string;

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

}

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

[
    {
        "id": "266F2B95-69AE-EA11-96D2-28187800655A",
        "name": "Main",
        "desks": 2,
        "company": {}
    }
]

即使 console.log 吐出来

Company {
  id: '09A8FB3E-C5AB-EA11-96D2-28187800655A',
  name: 'Name' }

我在这里做错了什么?

【问题讨论】:

    标签: typeorm class-transformer


    【解决方案1】:

    类转换器同步调用转换函数。您必须使用急切的关系:

      @ManyToOne(() => Company, { eager: true })
      company!: Promise<Company>;
    

    或之后加载属性,如:

    export class Space {
      ...
      loadedCompany: Company
      ...
    }
    
    ...
    
      for (const space of spaces) {
         space.loadedCompany = await space.company
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      • 2021-06-10
      • 2021-02-20
      相关资源
      最近更新 更多