![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 235 Pomógł: 2 Dołączył: 30.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Mam zapisaną strukturę NestedSet:
Kod id | tree_left | tree_right | user_id ----+-----------+------------+--------- 10 | 1 | 14 | 3 16 | 2 | 7 | 3 20 | 3 | 4 | 3 24 | 5 | 6 | 3 21 | 8 | 9 | 3 22 | 10 | 11 | 3 23 | 12 | 13 | 3 A więc takie drzewo: Kod 10 -- 16 -- -- 20 -- -- 24 -- 21 -- 22 -- 23 Gdzie user_id to tree_scope Posiłkując się dokumentacją stworzyłem iterator: Kod class TreeDisplayIterator extends RecursiveIteratorIterator { public function __construct($m){parent::__construct($m, self::SELF_FIRST );} public function beginChildren(){echo '<ul>';} public function endChildren() {echo '</ul>';} } Wszystko jest w porządku jeśli chcę wyświetlać całe drzewo: Kod <ul> <?php foreach(new TreeDisplayIterator(TreePeer::retrieveTree(3)) as $elem): ?> <li><?php echo $elem->getTitle() ?></li> <?php endforeach ?> </ul> Lista jest kompletna, elementy dobrze zagnieżdżone a ja bardzo szczęśliwy. Nie wiem tylko jak wyświetlić określoną odnogę. Dla przykładu dla wpisu o ID 16 chciałbym uzyskać coś takiego: Kod 16 -- 20 -- 24 Ale wszystkie próby zawiodły, próbowałem tak: Kod <ul> <?php foreach(new TreeDisplayIterator(TreePeer::retrieveByPk(16)) as $elem): ?> <li><?php echo $elem->getTitle() ?></li> <?php endforeach ?> </ul> Ale to nie to. Jak to zrobić bez zbędnego mnożenia zapytań do bazy? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Obsłuż odpowiednio RecursiveIteratorIterator:getDepth()
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 235 Pomógł: 2 Dołączył: 30.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Obsłuż odpowiednio RecursiveIteratorIterator:getDepth() Jest do dobre rozwiązanie, ale nie idealne bo z bazy będzie wyciągnięte i tak całe drzewo. Rozwiązanie banalne ale nigdzie nie opisane:
Ten post edytował Ziels 30.06.2009, 12:52:03 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 31.07.2025 - 08:49 |