Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] Własne zapytanie COUNT(*) w admin generator
Forum PHP.pl > Forum > PHP > Frameworki
Wave
Witam,
są jakieś sposoby aby zmienić zapytanie 'liczące' nie zmieniając zapytania głównego?

w tej chwili doctrine generuje mi masakryczną sieczkę:
  1. SELECT COUNT(*) AS num_results FROM (SELECT a.id FROM ads a LEFT JOIN categories c ON a.categories_id = c.id LEFT JOIN categories_translation c2 ON c.id = c2.id AND (c2.lang = 'en') LEFT JOIN subcategories s ON a.subcategories_id = s.id LEFT JOIN subcategories_translation s2 ON s.id = s2.id AND (s2.lang = 'en') GROUP BY a.id)


Taka kobyła nie dość, że wolna to jeszcze wywala mi błąd:
Cytat
#1248 - Every derived table must have its own alias


natomiast wystarczyłoby mi tylko coś takiego:
  1. SELECT COUNT(*) AS num_results FROM ads


do obsługi listy w admin generatorze używam takiej funkcji:
  1. public function retrieveBackendAdsList(Doctrine_Query $q)
  2. {
  3. $rootAlias = $q->getRootAlias();
  4.  
  5. $q->LeftJoin($rootAlias . '.Categories c')
  6. ->LeftJoin('c.Translation ct WITH ct.lang = ?', sfContext::getInstance()->getUser()->getCulture())
  7. ->LeftJoin($rootAlias . '.Subcategories s')
  8. ->LeftJoin('s.Translation st WITH st.lang = ?', sfContext::getInstance()->getUser()->getCulture())
  9. ->AddSelect($rootAlias .'.*, ct.name as category, st.name as subcategory');
  10.  
  11. return $q;
  12. }


Chciałbym, żeby dotyczyło to tylko zapytania głównego i nie psuło innych zapytań. Jakieś pomysły?
Wiem, że można edytować kod doctrine, aczkolwiek tej zmiany potrzebuję tylko w jednym module, nie w całym serwisie.
destroyerr
Istnieje metoda sfDoctrinePager::setQuery(). Na podstawie przesłanego zapytania, jest budowane zapytanie, które sprawdza liczbę rekordów. Możesz kombinować z ustawieniem zapytania przed wykonaniem sfDoctrinePager::init() i następnego po jej wykonaniu. Osobiście skłaniałbym się do nadpisania tego pagera, tym bardziej, że można go łatwo ustawić (tak żeby był wykorzystywany w generatorze) w generator.yml.
Wave
Dzięki za odpowiedź. Gdzie umieścić klasę własnego pagera z pager_class? Obojętne?
destroyerr
Tak, obojętne. Ja staram się zawsze zachowywać miejsce klasy rozszerzającej, podobne do rozszerzanej.
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.