![]() |
![]() ![]() |
![]() |
![]()
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:
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: 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 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Powinieneś jeszcze w zapytaniu zaznaczyć, że chcesz pobrać informacje dot. gatunku: Doctrine\ORM\QueryBuilder::addSelect.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 37 Pomógł: 0 Dołączył: 1.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 37 Pomógł: 0 Dołączył: 1.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Próbowałem robić coś podobnego wcześniej, Twój sposób rzeczywiście dobrze działa, ale z tym, że teraz nie da się ustawić ilości pobieranych książek, ponieważ, gdy dam ->setMaxResults(20)-> to np. książkę która zawiera 3 gatunki policzy trzykrotnie i w ten sposób pobierze mniej książek niż 20.
Chodzi mi po prostu o podzielenie wyników na wiele stron po 20 wyników. EDIT: Wymyśliłem to tak:
być może tak by zadziałało, problemem pozostaje to, że o ile się orientuję to limity są obsługiwane tylko przez ->SetMaxResults(20)->, w każdym razie mam błąd przy słowie LIMIT. EDIT2: Chyba trzeba to zapytanie po prostu zapisać w DQB, ale mimo, że znalazłem parę przykładów to dalej nie wiem jak to zrobić. EDIT 3: Udało mi się to zamienić na DQB:
Ale to nic nie zmienia, ponieważ jeżeli dam setMaxResults to działa on tylko na ostateczną treśc zapytania, czyli na całe zapytanie. W każdym razie chyba jedynym rozwiązaniem będzie rozdzielenie tego na 2 oddzielnie wykonujące się zapytania. Pierwsze pobierze 20 numerów id książek i da drugiemu żeby wiedziało które książki pobrać. Dzięki za pomoc, pozdrawiam! Ten post edytował marekc12 10.08.2011, 22:43:39 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 11:39 |