Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] Nadmiarowe zapytania?
Forum PHP.pl > Forum > PHP > Frameworki
masterix
Witam,

Mam taką selekcję:
  1. class CommentPeer extends BaseCommentPeer
  2. {
  3. public static function getRestaurantComments($id)
  4. {
  5. $c = new Criteria();
  6. $c->addJoin(self::ORDER_ID, FoodOrderPeer::ID);
  7. $c->addJoin(FoodOrderPeer::COMPANY_ID, sfGuardUserPeer::ID);
  8. $c->addJoin(sfGuardUserPeer::ID, RestaurantPeer::COMPANY_ID);
  9. $c->add(RestaurantPeer::ID, $id);
  10.  
  11. return self::doSelect($c);
  12. }
  13. }

Oraz taki getter:
  1. class Comment extends BaseComment
  2. {
  3. public function getUsername()
  4. {
  5. return $this->getsfGuardUser()->getUsername();
  6. }
  7. }

I niestety jeśli w ten sposób pobiorę komentarze i następnie w pętli robię echo $comment->getUsername() to dostaję dodatkowe zapytania, mimo, że sfGuardUser jest niby zjoinowany. Jak zrobić, żeby tych dodatkowych zapytań nie było? Przy 10 komentarzach będzie to 10 dodatkowych zapytań, co jest mi nie na rękę.

Widzę, że w wygenerowanym zapytaniu:
  1. SELECT comment.ID, comment.ORDER_ID, comment.USER_ID, comment.NOTE, comment.TEXT FROM `comment`, `restaurant`, `food_order`, `sf_guard_user` WHERE restaurant.ID=5 AND comment.ORDER_ID=food_order.ID AND food_order.COMPANY_ID=sf_guard_user.ID AND sf_guard_user.ID=restaurant.COMPANY_ID
są pobierane tylko kolumny z comment. Pewnie zmiana tego da mi to, co chcę. Pytanie tylko jak? smile.gif

Kolejny krok do przodu:
  1. self::addSelectColumns($c);
  2. sfGuardUserPeer::addSelectColumns($c);

Ale nadal są dodatkowe zapytania wywoływane..

pzdr.

Pozostało mi ręczne tworzenie obiektów...
phpion
Przejrzyj sobie zawartość klasy BaseCommentPeer. Jeśli zdefiniowałeś relacje w schema.yml to powinny tam być metody doSelectJoin* (np. doSelectJoinTabela), z których możesz skorzystać.
baniczek
nie lepiej doSelectJoinAll ?
masterix
Tam nie było prostego połączenia kluczami obcymi między relacjami więc używanie wygenerowanych doSelecJoin* nie mogło mieć miejsca smile.gif

pzdr.
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.