Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony][Doctrine] Zapytania przy relacjach ManyToMany
marekc12
post
Post #1





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 1.08.2008

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


Witam,

pytanie dotyczy Symfony 2.

Wiele książek (tabela book) może być przypisanych do wielu gatunków (tabela genre). Wykorzystałem relację Many-To-Many, Bidirectional.

Wyciągam 20 książek, takich które należą do konkretnego gatunku (po prostu chcę wyświetlić np. tylko książki fantasty), zapytaniem:
  1. $query = $this->getDoctrine()->getRepository('ProjektPageBundle:Book')->createQueryBuilder('b');
  2. $query = $query->join('b.genres', 'g')->where('g.id = gId')->setParameter('gId', $gatunek);
  3. $query = $query->setFirstResult($offset)->setMaxResults(20)->getQuery();
  4. $books = $query->getResult();


wysyłam zmienną $books zawierającą 20 książek do templatki, a w niej wyświetlam je. Przy każdej książce wyświetlam informacje o niej z tabeli book oraz nazwy gatunków do jakich należy dana książka (może być ich kilka). Oto kawałek tamplatki:

  1. {% for book in books %}
  2. <h2>{{ book.title }}, {{ book.titlepl }}</h2>
  3. <p>
  4. Kraj wydania: {{ book.country }}<br />
  5. Gatunki:
  6. {% for genre in book.genres %}
  7. {{ genre.name }}
  8. {% endfor %}
  9. </p>
  10. {% endfor %}


Niby wszystko działa, ale martwi mnie to, że w momencie wyświetlania listy gatunków do których każda książka należy wykonuje się zapytanie do bazy i gdy wyświetlam te 20 książek to dochodzi 20 zapytań. Co oznacza, że pewnie niezbyt dobrze to robię. Jak to powinienem zrobić?

Mam nadzieję, że post jest zrozumiały.

Ten post edytował marekc12 9.08.2011, 14:51:07
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
marekc12
post
Post #2





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 1.08.2008

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


  1. ->addSelect('g')


po wciśnięciu tego w zapytanie rzeczywiście dodatkowe zapytania się nie wykonują i gatunki są pobierane od razu razem z książkami, ale teraz niestety widok wyświetla mi przy każdej książce tylko jedną nazwę gatunku ( no bo gatunki są przecież teraz pobierane razem z książkami z tym warunkiem ->where('g.id = gId')-> ). Nie mam pomysłu jak to rozwiązać...

Ten post edytował marekc12 9.08.2011, 16:28:08
Go to the top of the page
+Quote Post

Posty w temacie


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: 19.08.2025 - 18:23