[inny] Phalcon - pobranie rekordów wraz z powiazanymi rekordami |
[inny] Phalcon - pobranie rekordów wraz z powiazanymi rekordami |
16.04.2016, 19:12:20
Post
#1
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 11.04.2014 Ostrzeżenie: (0%) |
Witam.
W dużym skrócie potrzebuję pobrać rekordy (które mają parentID = NULL) a potem rekordy potomne i ich rekordy potomne i tak dalej. Problem w tym, że ilość powiązań jest nieograniczona. W tym przypadku chodzi o kategorie. Może najpierw kod. Struktura mojej bazy wygląda tak:
Przykład: Model:
I pracuję nad funkcją, która pobierze wszystkie rekordy w odpowiedniej kolejności (tzn. rekord główny (parentID = NULL), potem jego rekordy potomne i ich rekordy potomne, aby w końcu powstało coś takiego: Cały dzień nad tym myslę, kombinuję i nic... Wielu rozwiazań próbowałem (włącznie z zapisywaniem wszystkich rekordów do tablic i próbą ich sortowania) ale nic z tego nie wychodzi... Problem jest w tym, że ilość zagnieżdżeń jest dowolna (gdyby tak nie było to wrzuciłbym pętlę for te X razy i by było). Będę bardzo wdzieczny za pomoc. Pozdrawiam Ten post edytował skorpionek93 16.04.2016, 19:35:29 |
|
|
20.04.2016, 11:32:58
Post
#2
|
|
Grupa: Moderatorzy Postów: 6 070 Pomógł: 860 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza |
Nie podam Ci rozwiązania typowo dla Phalcona, ale ogólne. Pobierasz rekordy posortowane w odpowiedni sposób (tak jak chcesz by widniały w drzewku), np. po nazwie:
Następnie w PHP robisz tablicę, gdzie kluczem jest ID kategorii nadrzędnej (dla NULL wstawiasz 0), a wartościami jej dzieci: Kod $tree = array( 0 => array( array('id' => 1, 'name' => 'Procesory') ), 1 => array( array('id' => 2, 'name' => 'AMD'), array('id' => 3, 'name' => 'Intel') ), 3 => array( array('id' => 5, 'name' => 'i7') ) ); Teraz piszesz funkcję, która wyświetli Ci drzewko (dla danego parent_id) oraz ewentualnie rekurencyjnie elementy podrzędne, coś w stylu: 1. Jako parametr przekazujesz całe drzewo oraz aktualne parent_id (domyślnie 0). 2. Jeśli istnieje klucz $tree[$parent_id] to lecisz po jego elementach ($item). 3. Jeśli istnieje klucz $tree[$item['id']] czyli element ma swoich potomków to wykonujesz tą samą funkcję, ale z drugim parametrem $item['id']. Tyle. Kwestia odpowiedniego ulokowania <ul> oraz <li> i masz ładne drzewko. Rozwiązanie stosowałem w wielu projektach. Drzewko trzymałem w cache, do tego miałem dodatkowe funkcje jak np. pobranie ścieżki do kategorii czy ID wszystkich potomków. |
|
|
23.04.2016, 16:59:10
Post
#3
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 11.04.2014 Ostrzeżenie: (0%) |
Dziękuję bardzo za pomoc. Na tej podstawie napisałem działajacą funkcję rekurencyjną (z drobnymi zmianami).
Pozdrawiam serdecznie |
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 14:51 |