W artykule omówione są dwa podejścia Adjacency List Model i Nested Set. Pierwsze doskonale sprawdza się w przypadku 2, no góra trzech zagnieżdżeć ale jest łatwiejsze do zaimplementowania. Nested Set sprawdza się gdy chcemy jednym zapytaniem pobrać całe drzewo lub całą ścieżkę.
Jeżeli chcemy skorzystać z Nested Net w projekcie opartym o symfony, należy w strukturze danych (schema.yml), ktore kolumny zawierają TREE_LEFT, TREE_RIGHT, TREE_SCOPE, np:
categories: _attributes: { phpName: Category, treeMode: NestedSet} id: ~ #symfony default lft: { type: integer, required: true, nestedSetLeftKey: true, phpName: Left } rgt: { type: integer, required: true, nestedSetRightKey: true, phpName: Right } level: { type: integer, required: true } name: { type: varchar(100), required: true } photo: { type: varchar(255) }
Nested Set jest dostępny dopiero od ostatniej wersji propela 1.3. W symfony 1.1 musimy zainstalowac plugin Propel 1.3 z repozytorium http://svn.symfony-project.com/plugins/sfPropelPlugin/branches/1.3
Z moich dotychczasowych doświadczeń mogę powiedzieć, że rozwiązanie nie jest jeszcze w pełni stabilne. W przypadku modyfikacji, przenoszenia gałęzi czasem gubiona jest struktura.
Innym rozwiązaniem dla symfony jest plugin sfPropelActAsNestedSetBehaviorPlugin. Ten plugin zdaje się być w pełni stabilny. Z kolei nie bedzie w pełni działał pod Propelem 1.3.
Podsumowując, zarówno dla symfony 1.0, jak i dla symfony 1.1 polecam sfPropelActAsNestedSetBehaviorPlugin.