如何创建与另一个相同类型的实体相关的实体(递归实体)

时间:2020-06-08 11:37:31

标签: nestjs

简而言之:我有一个名为Section的实体,它应该包含一个名为Subsection的字段。每个小节可以有多个小节,一个小节只能属于一个小节。所以我们这里有Many2One。该类看起来像这样(我只复制了几个字段):

@Entity('section')
export class SectionEntity {
    @PrimaryGeneratedColumn('increment')
    id: number;

    @Column({
        type: 'int',
        name: 'template_id',
        nullable: true,
    })
    templateId: number;

    @Column({
        type: 'varchar',
        name: 'name',
    })
    name: string;

    @Column({
        type: 'boolean',
        name: 'is_base_template',
    })
    isBaseTemplate: boolean;
}

但是我需要添加另一个subsections类型的字段SectionEntity。因此,在这种情况下,它将看起来像递归类型。

我该怎么办?那么装饰者之间的关系会怎样?

1 个答案:

答案 0 :(得分:1)

我假设这实际上是来自装饰实体的Typeorm问题。Typeorm中对此有支持,您可以找到一个很好的示例here。 在这种情况下,它将看起来像这样:

@Entity('section')
export class SectionEntity {
   @PrimaryGeneratedColumn('increment')
   id: number;

   @Column({
      type: 'int',
      name: 'template_id',
      nullable: true,
   })
   templateId: number;

   @Column({
      type: 'varchar',
      name: 'name',
   })
   name: string;

   @Column({
      type: 'boolean',
      name: 'is_base_template',
   })
   isBaseTemplate: boolean;

   @ManyToOne(type => SectionEntity, section => section.subsections)
   parentSection: SectionEntity;

   @OneToMany(type => SectionEntity, section => section.parentSection)
   subsections: SectionEntity[];
}