Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SF][SF2][Symfony2]Pobranie pod kategorii w Doctrine Tree extensions
Crash89
post
Post #1





Grupa: Zarejestrowani
Postów: 191
Pomógł: 7
Dołączył: 3.04.2013

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
lukaskolista
post
Post #2





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


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');
Go to the top of the page
+Quote Post
Crash89
post
Post #3





Grupa: Zarejestrowani
Postów: 191
Pomógł: 7
Dołączył: 3.04.2013

Ostrzeżenie: (0%)
-----


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ś.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 13:17