我正在使用 TypeORM 物化树。有一个名为
organization
的实体,每个组织都有一个父级,并且可以有多个子级。
@Entity('organizations')
@Tree('materialized-path')
export class Organization {
@Column()
name: string;
@TreeChildren()
children?: Organization[];
@TreeParent()
parent?: Organization;
}
我打电话给
findAncestorsTree
去接树上孩子的父母。根据 TypeORM 文档,它应该返回所有直接子项的父组织(带有“父项的父项”),但它只返回没有任何父项的子项。
const organization = await this.organizationRepository.findOne({
where: { id },
});
return this.dataSource.manager.getTreeRepository(Organization).findAncestorsTree(organization);
我得到的回应:
{
"id": "1",
"name": "A3-121"
}
我期望得到什么:
{
"id": "1",
"name": "A3-121",
"parent": {
"id": "2",
"name": "A2-12",
"parent": {
...,
"parent": {
...
}
}
}
}
如何获取树中子组织的所有父组织?
二手包:
"typeorm": "^0.3.16"
"@nestjs/typeorm": "^9.0.1"
我也有同样的问题。目前,我使用了递归函数来解决问题。
function getAllNestedParents(obj: any): any[] {
if (!obj?.parent) {
return [];
}
const parents: any[] = [obj.parent];
return parents.concat(getAllNestedParents(obj.parent));
}
请将
any
类型替换为您的用例。