Categorías
Symfony

Symfony 1.2 + Propel 1.3 + Nested Set Model (Modelo Jerarquico o Anidado)

La idea es probar lo mencionado en el titulo.

Para el Modelo de Datos, pensaremos en una entidad como Cuentas Contables

cuenta_contable:
_attributes: { phpName: CuentaContable, treeMode: NestedSet }
id:
lft:            { type: integer, index: true, required: true, default: 0, nestedSetLeftKey: “true” }
rgt:           { type: integer, index: true, required: true, default: 0, nestedSetRightKey: “true” }
scope:       { type: integer, index: true, required: true, default: 0, treeScopeKey: “true” }

los ultimos atributos de lft rgt y scope, va con comillas, si queres que al generar el XML, quede en true y no en 1

La idea de un nested set model, es poder tratar los datos y grupos de ellos con delimitadores.

Imaginemos la numeracion de una larga Avenida o Ruta de nuestra ciudad. Muhcas veces ese camino, atraviesa distintos barrios, departamentos o distritos, incluso las rutas atraviesan provincias y estados.

Pensemos por ahora en alguna cuadra de 100 metros de esa avenida. Esa cuadra tiene una numeracion inicial y final, ej 501 a 600. En ese tramo hay casas con su domicilio. Por ende si quiesiera considerar a todas las casa de la cuadra deberiamos seleccionar toda numeracion comprendida entre 501 y 600.
Si tomamos unas cuadras mas y pensamo en los limistes de un barrio, tendremos una primer cuadra y una ultima, ambas con su numeracion inicial y final, ejemplo 001 a 2500 (serian 25 cuadras). Si quisieramos saber todos los domicilios de ese barrio para la avenida X, solo deberiamos buscar todo lo comprendido entre 001 y 2500.
Y asi sucesivamente, podriamos pensar en distrito, y luego otra representacion superior como el estado o provincia.

Aqui la idea es que hay representaciones de datos, que estan contenidas en otras, en forma recursiva. Y que cada representacion tiene un indice inicial y final (para simplificar el caso, los domicilios, no se le impuso esta condicion, pero deberian tenerla para este modelo de datos).

1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2 . . . . . . . . 7        8 . . . . . . . . . . . . . . 13

3 . . 4   5 . . 6        9 . . . . 10    11 . . . . 12

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *