首页 > 解决方案 > 如何对 typeorm 关系进行递归

问题描述

类别.ts

@Entity('categoryenter code here')
export class Category{
  @PrimaryGeneratedColumn({ type: 'int' })
  id: Category;

  @OneToMany(() => Category, category => category.category,{eager:true})
  categoryList: Category[];

  @ManyToOne(() => Category, (category) => category.categoryList)
  category: Category;
}

Category 实体在上面(mysql)。我想找到一个像这样的所有孩子的类别

await categoryRepo.findOne({
  where:{ id: 1 },
  relations:['categoryList']
})

但我有一个错误Maximum call stack size exceeded

我该怎么做

标签: node.jstypescriptnestjstypeorm

解决方案


实际上,正如我所见,您正在尝试制作树数据结构。TypeORM 有一些装饰器。这是一个例子:

import {
  Entity, BaseEntity, Column,
  PrimaryGeneratedColumn, Tree,
  TreeParent, TreeChildren
} from 'typeorm';

@Tree('materialized-path')
@Entity({ name: 'Menu' })
export class Category extends BaseEntity {
  @PrimaryGeneratedColumn({ type: 'int' })
  id: number;

  @Column({ type: 'varchar', length: 50 })
  text: string;

  // Check bellow
  @TreeParent()
  parent: Category;

  @TreeChildren()
  children: Category[];
}

装饰器@Tree()用于告诉 TypeORM 每个实例都有自己的自引用。每个项目都应该有一个父母,并且应该有几个孩子。可以用装饰器@TreeParent()@TreeChildren()分别设置祖先和后代。查看文档以获取有关可用于@Tree()装饰器的不同模式的更多详细信息。


推荐阅读