Saltar a contenido

Consultas jerárquicas

Cuando una tabla declara una columna self_reference, su find_many gana tres parámetros:

equipos = public_sync_api.equipo.find_many(
    tree_mode='descendants',    # 'flat' (default) | 'descendants' | 'ancestors' | 'full_tree'
    tree_root=17,               # PK del nodo raíz
    tree_depth=3,               # profundidad máxima; None = sin límite
)

Los cuatro modos

tree_mode Qué devuelve
'flat' Lo de siempre: una lista plana. Es el valor por defecto
'descendants' El nodo raíz y todo lo que cuelga de él
'ancestors' La cadena desde el nodo hasta la raíz
'full_tree' El árbol completo al que pertenece el nodo

Elegir la raíz

# Explícita
public_sync_api.equipo.find_many(tree_mode='descendants', tree_root=17)

# Implícita: las filas que pasen los filtros son las raíces
public_sync_api.equipo.find_many(tree_mode='descendants', centro_id=3)

Sin tree_root, tai-sql ejecuta primero la consulta filtrada para saber de qué nodos partir, y luego recorre desde ellos. Si el filtro no devuelve nada, la lista sale vacía sin recorrer nada.

Profundidad

tree_depth limita los niveles que se recorren. None —el valor por defecto— no limita, lo cual en una jerarquía profunda puede ser mucha fila: en tablas grandes, pon un límite.

Qué devuelve

La misma lista de DTOs <Modelo>Read que find_many, con las relaciones que hayas pedido en includes. La estructura de árbol se reconstruye siguiendo la columna de la jerarquía.

Combínalo con includes

public_sync_api.equipo.find_many(
    tree_mode='full_tree',
    tree_root=17,
    includes=['componentes'],
)