如何在typeorm中加入树结构中的每个子实体

Posted

技术标签:

【中文标题】如何在typeorm中加入树结构中的每个子实体【英文标题】:How to join every child entity in a tree structure in typeorm 【发布时间】:2021-07-28 08:37:55 【问题描述】:

我有一个类别的树形结构。这些类别与其他表有关系。

import Entity, Column, PrimaryGeneratedColumn, ManyToOne, OneToMany from "typeorm";
@Entity()
export class Category 

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: string;

    @Column()
    description: string;

    @ManyToOne(type => Category, category => category.children)
    parent: Category;

    @OneToMany(type => Category, category => category.parent)
    children: Category[];

    @OneToMany(type => Site, site => site.category)
    sites: Site[];

我获取树的代码:

console.log(await getConnection().getTreeRepository(Category).findTrees());

结果:

[
  Category 
    pk: 8,
    id: '1C606380-020A-4CED-8EBA-AA1C9C16FCF2',
    title: 'Category EXPLICIT',
    createdBy: 'SAFETYMANUAL',
    createdAt: 2021-07-27T19:57:03.213Z,       
    hidden: false,
    orderValue: 0,
    deletionDate: null,
    childCategories: [ [Category] ]
  
]

我想用关系加载整个树,在本例中是 Sites 数组。将 eager 设置为 true 不会改变任何事情。我只取回没有站点数组的树。是否有可能加入树结构?

【问题讨论】:

嘿,我也无法加载树中的关系。你找到解决办法了吗? @rickster 我实现了一个拉取请求,可以加载关系。我为我的问题添加了答案。希望对您有所帮助。 【参考方案1】:

我实现了一个拉取请求,可以为树加载关系:

const treeCategoriesWithRelations = await repository.findTrees( relations: ["sites"] );
// automatically joins the sites relation

【讨论】:

最新版本的 Nest 是否可用,即 8.1.1 ?因为我无法使用它。它给了我错误。 Expected 0 arguements. Recieved 2这样的 @rickster 可能还没有在 Nest 中可用 - 这是一个相当新的功能,但在最新的 typeorm 版本中发布。 Nest 可能还没有更新到最新的 typeorm 版本。 哦,好吧。谢谢。

以上是关于如何在typeorm中加入树结构中的每个子实体的主要内容,如果未能解决你的问题,请参考以下文章

NestJS 中的 TypeORM - 如何在实体中获取 MySQL 嵌套对象并对子关系进行“位置”查询?

TypeORM:如何查询与字符串数组输入的多对多关系以查找所有字符串都应存在于相关实体列中的实体?

如何在 TypeOrm 中表示视图?

如何使用 typeorm 实体在 mysql 中使用现有表?

如何在typeORM中保存@ManyToMany中的关系

如何在带有typeorm的nestjs项目中使用外部实体?