Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][Doctrine]Liczba elementów w NestedSet
Forum PHP.pl > Forum > PHP > Frameworki
luck
Mam drzewo kategorii, którego model oparty jest o NestedSet Doctrine. Do każdej kategorii mam dołączone artykuły (poprzez FK category_id). Teraz w liście kategorii na stronie chciałbym obok ich nazw umieścić również liczbę artykułów przypisanych do danej kategorii, tak jak to jest np. w menu Allegro. Oczywiście nie chcę wywoływać do tego osobnego zapytania, wolałbym aby liczba elementów była pobierana z bazy wraz z listą kategorii.
Zazwyczaj robiłem to zgodnie z tym opisem: http://dev.mysql.com/tech-resources/articl...hical-data.html, ale w NestedSet nie określamy parent_id, a jedynie level, więc to rozwiązanie nie zadziała. Może ktoś z Was już to przerabiał i będzie mógł mi podać jakieś wskazówki?
destroyerr
Zastanów się czy problem rzeczywiście dotyczy symfony i Doctrine. Moim zdaniem nie.
Przecież w tym artykule jest też opisany Twój problem, czyli liczba produktów w kategorii. Zadaj bardziej konkretne pytanie, pokazując co do tej pory zrobiłeś sam.
luck
Pytanie konkretne jest takie: Jak przy użyciu Doctrine pobrać z bazy listę obiektów NestedSet wraz z liczbą przypisanych do każdego z nich elementów. Bardziej skonkretyzować nie potrafię. Szczegóły podałem w poprzednim poście.
Jeśli używałeś kiedykolwiek NestedSet z Doctrine, to na pewno zauważyłeś, że tam hierarchia jest określana za pomocą odpowiednich wartości lft, rgt i level. W przykładzie z Dev MySQLa jest to rozwiązane nieco inaczej - określają nie poziom zagnieżdżenia, a id rodzica. Dlatego w tym wypadku się nie sprawdzi. Mi chodzi o skuteczne pobranie liczby elementów przy użyciu właśnie Doctrine. Miałem nadzieję, że ktoś tutaj już to przerabiał. Listingu YML nie ma sensu wklejać, bo definicje tabel są niemal identyczne z tymi, które można znaleźć w odpowiednim rozdziale dokumentacji Doctrine. Spoko, skoro nikt z akurat przeglądających forum z tym nie walczył, to trzeba będzie samemu usiąść i coś wymyślić winksmiley.jpg
morgan
Dorób sobie dodatkowe pole w Category w którym będziesz trzymał liczbę artykułów. Nadpisz metodę save() artykułu, gdzie bedziesz inkrementował tą wartość i wartości rodziców, calośc zamknij w transakcje i tyle, naprawde tutaj nie ma jakiejs filozofii. i tak samo nadpisz metodę delete gdzie będziesz tą wartość dekrementował i tak samo wartości rodziców i tez calośc zamknij w transakcje.

Po to 'doctrine nested set' ma model objektowy zeby z niego korzystać i nie zastanawiać się ze tutaj pola są takie a nie inne, mozesz sobie bez problemu działać na drzewie i w ogóle nie wnikać w strukturę tabeli. Polecam dokumentacje doctrine i symfony.
luck
Tu nie chodzi o filozofię, tylko o to, żeby nie wynajdować koła od nowa. W tym celu najpierw spytałem na forum o doświadczenia innych. Myślałem bardziej o operowaniu na już istniejącym modelu, ponieważ kryteria zliczania aktywnych artykułów mogą się zmieniać. Mimo wszystko Twoje rozwiązanie ma sens, nie będzie jazdy po tabelach przy każdym wyświetleniu listy kategorii tylko po to, żeby zliczyć ilość powiązanych elementów. Spróbuję pójść w tym kierunku. Dzięki za pomoc, pozdrawiam.
morgan
Cieszę się że pomogłem :] Też pozdrawiam :]
phpion
Cytat(destroyerr @ 21.03.2010, 13:49:37 ) *
Przecież w tym artykule jest też opisany Twój problem, czyli liczba produktów w kategorii.

Bardzo słuszna uwaga! Lecz jeśli ktoś ma problem z czytaniem to tylko utrudnia sobie życie. Nie podam teraz dokładnego miejsca w artykule z rozwiązaniem tego problemu - pozostawię przyjemność "odkrycia" autorowi tematu.
luck
Cytat(phpion @ 22.03.2010, 08:21:28 ) *
Lecz jeśli ktoś ma problem z czytaniem to tylko utrudnia sobie życie.

Jest dokładnie jak piszesz, ale jak widać nie tylko w odniesieniu do mnie. Chodzi Ci o ten fragment?
Kod
Now let's produce a query that can retrieve our category tree, along with a product count for each category:

Napisałem, że już wcześniej korzystałem ze sposobu przedstawionego w przytoczonym artykule. Z jakich powodów szukam innego rozwiązania nie będę powtarzał, bo nie ma sensu. W każdym razie dzięki za zainteresowanie.
phpion
Nie rozumiem. Korzystasz z nested sets i chcesz pobrać listę kategorii wraz z liczbą produktów dla każdej kategorii. Dokładnie takie rozwiązanie jest w przytaczanym artykule, dokładnie tam gdzie podałeś. Przykład ten tyczy nested sets, a nie struktury z parent_id (co "zarzucałeś" w pierwszym poście). W czym więc problem?
luck
Wszystko się zgadza. Tylko ja w pierwszym zdaniu pierwszego postu napisałem, że chodzi o NestedSet Doctrine. Ten mechanizm jest nieco inny od opisywanego w artykule Dev MySQL. Tutaj jest dokładnie to, czego dotyczyło moje pytanie: http://www.doctrine-project.org/documentat...data#nested-set. Ale już nie ma problemu, spróbuję sobie poradzić sposobem który posunął wyżej morgan.
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.