Solución:
Básicamente estás usando un Adjacency list Tree
.
La lista de adyacencia es un modelo simple con autorreferencia. El beneficio de este enfoque es la simplicidad, PERO el inconveniente es que no puede manejar árboles profundos con eso.
Hay una forma recursiva de hacerlo con la lista de adyacencia, pero no funciona con MySQL.
La solución es utilizar otro tipo de árbol. Otros árboles posibles son:
- Conjunto anidado: Es muy eficiente para las lecturas, pero malo para las escrituras. No puede tener varias raíces en un conjunto anidado.
- Camino materializado: (también llamado enumeración de ruta) es simple y efectivo.
- Mesa de cierre: almacena las relaciones entre padre e hijo en una tabla separada. Es eficiente tanto en lectura como en escritura (aún no se ha implementado la actualización o eliminación del padre de un componente)
@Entity()
@Tree("nested-set") // or @Tree("materialized-path") or @Tree("closure-table")
export class Category {
@PrimaryGeneratedColumn()
id: number;
@TreeChildren()
children: Category[];
@TreeParent()
parent: Category;
}
Para cargar un árbol use:
const manager = getManager();
const trees = await manager.getTreeRepository(Category).findTrees();
Después de obtener un repositorio de árbol, puede usar las siguientes funciones:
findTrees(), findRoots(), findDescendants(), findDescendantsTree()
y otros. Consulte la documentación para obtener más información.
Obtenga más información sobre los diferentes tipos de árboles: modelos para datos jerárquicos
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)