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.