Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]metoda rekurencyjnie - problem
Forum PHP.pl > Forum > Przedszkole
Marr
Witam, mam taką sytuację. W tabeli bazy danych trzymam informacje o departamentach, w kolumnie `parent` trzymam id departamentu "rodzica" , np:

id || name || parent
1 || nadrzedny || null
2 || podrzedny || 1
3 || podrzedny2 || 2

i teraz dla obiektu będącego departamentem pobrać całą ścieżkę rodziców (dla przykladu: dla id 3 powinienem dostać: 2,1), napisałem sobie coś takiego:

  1. <?php
  2. class Departament extends DAO_DAO
  3. {
  4. public $tree;
  5.  
  6. public function buildFamilyTree($childId)
  7.    {
  8.        try
  9.        {    
  10.            $child = Departament::find($childId);
  11.            $parent = Departament::find($childId->parent);
  12.            $tree .= $parent->id.', ';
  13.            $this->buildFamilyTree($parent->id);
  14.            
  15.        }
  16.        catch(DAO_RecordNotFoundException $rnfe)
  17.        {
  18.  
  19.        }
  20.        
  21.    }
  22.    
  23.    public function getTree()
  24.    {
  25.        return $tree;    
  26.    }
  27. }
  28. ?>


oczywiście metoda find zwraca obiekt o zadanym id. Szczerze mówiąc nie wiem co jest nie tak, wydaje mi się to naprawdę nieskomplikowane a jednak nie mogę sobie z tym poradzić. Będę wdzięczny za pomoc.
nospor
pierwsze i podstawowe pytanie: Mozesz jeszcze zmienic strukturę bazy? Jak możesz zrob to jak najszybciej i zamien ją na przyzwoitą strukturę drzewiastą. W necie jest tego trochę. To co tu masz to najgorsza metoda z mozliwych
VGT
w liniach 13 i 26 $tree zmienic na $this->tree

Z tego, co rozumiem, poszukujesz rozwiązania na standardową strukturę danych w postaci drzewa.
Niedawno miałem z tym do czynienia i taki sposob pobierania do ktorego zmierzasz uznalem za niezadowalajacy (coraz wiecej rekurencyjnych zapytan w miare rozrastania sie drzewa).

Zaproponować moge taki link: http://dev.mysql.com/tech-resources/articl...hical-data.html a konkretnie "Nested set model"

Na poczatku moze wydawac sie skomplikowane ale po ogarnieciu okazuje sie bardzo wygodne - wystarczy raz napisac klase z cala funkcjonalnoscia (dodawanie / usuwanie / przemieszczanie / pobieranie dzieci / sciezki rodzicow / subdrzew) i uzywac do woli.

***EDIT
nospor byl szybszy winksmiley.jpg
Marr
Dzięki za odpowiedzi, w zasadzie przyznam się, że nie pomyślałem, żeby korzystać z jakiś sprawdzonych rozwiązań typu drzewiaste struktury smile.gif Tak czy inaczej dzięki za pomoc, zaraz coś wykombinuje.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.