Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF][SF2][Symfony2]Pobranie pod kategorii w Doctrine Tree extensions
Forum PHP.pl > Forum > PHP > Frameworki
Crash89
Korzystam z Doctrine tree extensions, wersji z nested.
Chcę pobrać wszystkie podkategorie, z kategorii gdzie mają produkty i ilość tych produktów jest większa od zera.

Próbuję to zrobić takimi zapytaniami:
  1. $query = $this->createQueryBuilder('c')
  2. ->select('c')
  3. ->join('AppBundle:Product','p','p.category = c')
  4. ->where("c IN (:categories) AND p.amount > 0")
  5. ->setParameter('categories',$categories)
  6. ->getQuery();
  7.  
  8. RETURN $query->getResult();


Gdzie zmienna $categories to podkategorie wyciagnięte metodą getChildren();
Niestety pobiera mi wszystkie podkategorie a nie tylko te które są połączone z produktami.
Bo kiedy dana kategoria nie ma produktu powinno mi tej kategorii nie wyświetlać.
Myslałem że zwykły Join załatwi sprawę.
Chcę też pobrać produkty tylko dla podkategorii danej kategorii, ale takie zapytanie też nie działa prawidłowo, pobiera mi wtedy wszystkie produkty:
  1. $this->createQueryBuilder('p')
  2. ->select('p')
  3. ->join('AppBundle:Category','c','p.category = c')
  4. ->where('c.parent = :category AND p.amount > 0)
  5. ->getQuery();


Proszę Was o pomoc przy tych zapytaniach.
lukaskolista
Nie ogarniam po co zaciągać cały kombajn jakim jest ORM po to, żeby korzystać z query buildera zamiast z zależności między obiektami.

Pobierz produkty dla wszystkich podkategorii danej kategorii:
  1. <?php
  2. $id = 1;
  3.  
  4. $category = $this->get('some-repo')->find($id);
  5. $categoryChildren = $category->getChildren();
  6. foreach ($categoryChildren as $categoryChild) {
  7. foreach ($categoryChild->getProducts() as $product) {
  8. // Do something with product
  9. }
  10. }


W pierwszym przypadku masz błąd (o ile dobrze pamiętam, bo z Doctrine korzystałem ostatnio rok temu):
  1. <?php
  2.  
  3. // Zamiast 'p.category = c' podaj c.klucz_glowny
  4. $sth->join('AppBundle:Product','p','p.category = c.klucz_glowny');
Crash89
Cytat(lukaskolista @ 30.10.2016, 11:42:23 ) *
Nie ogarniam po co zaciągać cały kombajn jakim jest ORM po to, żeby korzystać z query buildera zamiast z zależności między obiektami.

Pobierz produkty dla wszystkich podkategorii danej kategorii:
  1. <?php
  2. $id = 1;
  3.  
  4. $category = $this->get('some-repo')->find($id);
  5. $categoryChildren = $category->getChildren();
  6. foreach ($categoryChildren as $categoryChild) {
  7. foreach ($categoryChild->getProducts() as $product) {
  8. // Do something with product
  9. }
  10. }


W pierwszym przypadku masz błąd (o ile dobrze pamiętam, bo z Doctrine korzystałem ostatnio rok temu):
  1. <?php
  2.  
  3. // Zamiast 'p.category = c' podaj c.klucz_glowny
  4. $sth->join('AppBundle:Product','p','p.category = c.klucz_glowny');


Dzięki, bardzo mi pomogłeś.
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.