Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SF2][Symfony2][Doctrine]Artykuły wraz z kategoriami
favik
post
Post #1





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 18.05.2010

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


Witam,
chcę pobrać listę artykułów wraz z przypisanymi do nich kategoriami. Tabele połączone są relacją wiele do wielu. Jednak:

  1. $query = $em->createQueryBuilder()
  2. ->select('a')
  3. ->from('MYSiteBundle:Article', 'a')
  4. ->innerJoin('a.channels', 'c')
  5. ->where('c.slug = :slug')
  6. ->setParameter('slug', $slug)
  7. ->getQuery();

Generuje następnie bardzo dużo zapytań przy wyświetlaniu (dodatkowe do każdego artykułu).



  1. $query = $em->createQueryBuilder()
  2. ->select('a', 'c')
  3. ->from('MYSiteBundle:Article', 'a')
  4. ->innerJoin('a.channels', 'c')
  5. ->where('c.slug = :slug')
  6. ->setParameter('slug', $slug)
  7. ->getQuery();

Pobiera tylko kategorie, którą aktualnie przeglądam podaną w $slug, a nie wszystkie do których przydzielony jest artykuł.


Czy da się to zrobić jednym zapytaniem?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Pierwsze zapytanie pobiera jedynie dane dotyczące artykułu (select(a)), stąd chcąc wyświetlić kategorie każdego z nich konieczne jest wykonanie nowego zapytania. Drugie zapytanie pobiera artykuł oraz wyłącznie jedną kategorię (where(c.slug = :slug)). Ciebie natomiast interesuje pobranie wszystkich artykułów i powiązanych z nimi kategorii, gdzie artykuł posiada powiązanie z daną kategorią:
  1. SELECT a, c FROM Article a INNER JOIN a.channels c WHERE :channel MEMBER OF a.channels
Parametr :channel to obiekt całej kategorii/kanału, tak więc najpierw powinieneś pobrać ten obiekt na podstawie parametru slug.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 3.10.2025 - 15:37