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.
Brak komentarzy:
Prześlij komentarz