Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [symfony] Pobieranie listy kategorii i kategorii nadrzędnych
Forum PHP.pl > Forum > PHP > Frameworki
BigB
Witam!

Mam skrypt, który pobiera dane produktu za pomocą kodu:
  1. $this->produkty = ProduktyPeer::doSelectJoinKategorie(new Criteria());


Dodam, że schema kategorii i produktów wygląda mniej-więcej tak:
Kod
  kategorie:
    id:    ~
    nazwa: { type: varchar(255), required: true }
    katid: { type: integer, foreignTable: kategorie, foreignReference: id, onDelete: cascade, required: false }

  produkty:
    id:        ~
    tytul:     { type: varchar(255), required: true }
    autor:     { type: integer, foreignTable: uzytkownicy, foreignReference: id, required: true }
    opis:      { type: longvarchar, required: true }
    miniatura: { type: integer, foreignTable: zdjecia, foreignReference: id, required: false }
    kategoria: { type: integer, foreignTable: kategorie, foreignReference: id, onDelete: setnull }

Więc jak można się domyśleć, kategorie mogą mieć podkategorie, a te podkategorie swoje podkategorie (kolumna "katid" określa rodzica - kategorię nadrzędną). A produkty i kategorie są połączone relacją.
Proszę Was o wskazówki, czy i jak wykonać listę kategorii i kategorii nadrzędnych, do jakich należy dany produkt, czyli np. mam kategorię Systemy operacyjne, w niej kategorię Windows, a w niej kategorię Windows XP. Przy stosowaniu tego kodu:
  1. $this->produkty = ProduktyPeer::doSelectJoinKategorie(new Criteria());

mogę łatwo wyświetlić kategorię, do jakiej należy produkt poprzez kod w szablonie:
  1. <?php echo $produkt->getKategorie()->getNazwa() ?>

Pytanie tylko jak pobrać (chyba, że już pobrałem, ale w to wątpię) listę kategorii w której znajduje się ta kategoria itd. czyli aby wyświetlało nie tylko "Windows XP", lecz "Systemy -> Windows -> Windows XP"?

Z góry dziękuję za pomoc,
Pozdrawiam
l3l0
Skoro chcesz taką strukturę to może coś w ten deseń:

  1. categories:
  2. _attributes: { phpName: CategoryProduct }
  3. id: ~
  4. name: { type: varchar(255), required: true }
  5. cat_id: { type: integer, foreignTable: categories, foreignReference: id, onDelete: cascade, required: false }
  6.  
  7. products:
  8. _attributes: { phpName: Product }
  9. id: ~
  10. title: { type: varchar(255), required: true }
  11. author: { type: integer, foreignTable: uzytkownicy, foreignReference: id, required: true }
  12. desc: { type: longvarchar, required: true }
  13. icon: { type: integer, foreignTable: pictures, foreignReference: id, required: false }
  14.  
  15. category_products:
  16. _attributes: { phpName: CategoryProduct }
  17. id: ~
  18. product_id: { type: integer, foreignTable: product, foreignReference: id}
  19. category_id: { type: integer, foreignTable: categories, foreignReference: id, onDelete: cascade, required: false }


I wtedy wszystkie katagorie wybierzasz do produktu (oczywiście podkategorie są również w relacji do produktu)
  1. $criteria = new Criteria();
  2. $criteria->add(CategoryProductPeer::PRODUCT_ID, $someId);
  3. $this->categoryProducts = CategoryProductPeer::doSelectJoinAll($criteria);


Widok:
  1. foreach ($categoryProducts as $categoryProduct):
  2. echo $categoryProduct->getCategory();
  3. endforeach;


Nie wiem czy coś pomogło, ale mam nadzieje że tak.

Pozdrawiam
Crozin
Propel oferuje wsparcie dla NestedSets - dlaczego z tego nie skorzystasz?
BigB
l3l0 Dzięki za chęci, ale to wychodzi na to samo, czyli mogę pobrać tylko kategorię, do której bezpośrednio należy produkt winksmiley.jpg
Crozin Chyba będę musiał poczytać w NestedSets, wydaje mi się to najmądrzejszym rozwiązaniem.
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.