node.js - TypeORM:关系渴望树实体
问题描述
我有一个这样的树实体:
@Entity('structures')
@Tree('closure-table')
export class StructureEntity extends AbstractEntity<StructureDto> {
@Column()
name: string;
@TreeParent({ onDelete: 'CASCADE' })
parent: StructureEntity;
@TreeChildren()
children: StructureEntity[];
// Eager option for enable eager loading
@ManyToOne(
() => OrganizationEntity,
(organization) => organization.structures, { eager: true },
)
organization: OrganizationEntity;
dtoClass = StructureDto;
}
我使用@Tree
带有'closure-table'类型的装饰器,它允许我拥有像父母和孩子一样的树关系。
我这样得到树:
const structures = await this.structuresRepository.findTrees();
我必须使用findTrees()
没有任何查询构建器的方法来获取数据库中的所有树及其所有孩子、孩子的孩子等。
我的问题是,除了我的表中的父子关系之外,我还有与组织实体的多对一关系。它工作正常,我可以将所有关系的数据写入数据库,但是当我获取数据时,我错过了组织属性:
{
"id": 1,
"createdAt": "2021-06-11T13:17:16.000Z",
"updatedAt": "2021-06-11T13:17:54.552Z",
"name": "Parent",
"children": [
{
"id": 2,
"createdAt": "2021-06-11T13:54:53.774Z",
"updatedAt": "2021-06-11T13:59:40.997Z",
"name": "Child",
"children": []
}
]
}
组织实体:
@Entity({ name: 'organizations' })
export class OrganizationEntity extends AbstractEntity<OrganizationDto> {
@Column()
name: string;
@OneToMany(() => StructureEntity, (structure) => structure.organization)
structures: StructureEntity[];
dtoClass = OrganizationDto;
}
我怀疑这是一个 TypeORM 松弛,因为我不能使用预先加载来使用我的实体中的树关系从另一个表中获取数据。有没有使用树结构获取所有实体数据的选项?
解决方案
我只在物化路径类型的树实体上进行了测试,并且具有多对多关系。在这种情况下,这样做解决了问题:
await getManager().getTreeRepository(StructureEntity).findTrees({ relations: ["organization"] });
推荐阅读
- java - Android工作室,任务':app:packageDebug'的执行失败
- python - FieldError at / 无法将关键字“title_icontains”解析为字段。选项有:完成、创建、解密、id、标题、用户、user_id
- azure - Azure Devops:选择在阶段级别使用哪个变量组
- azure - 使用 Azure ACR API 列出存储库标记
- amazon-web-services - 路由 53 中基于 aws 延迟的路由如何工作?
- c++ - 使用 RcppArmadillo 计算向量的尾和
- java - findViewById 仅对一个元素返回 null
- node.js - Nodemon 服务器无法使用 NPM 启动命令
- node.js - API调用返回的Contract_ABI有JSON接口错误
- java - 无法在 Java 终端中运行多个命令