Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [symfony] pobieranie danych z 2 tabel
phpion
post
Post #1





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Hejka,
mam problem i nie bardzo wiem jak to ugryźć.
Otóż: mam tabelę:
  1. ogloszenia (id, kategoria, tytul...)

i jest to tabela macierzysta. Część podkategorii ma rozszerzoną tą tabelę o inną np.
  1. samochody (id_ogloszenia, marka, model...)

lub też
  1. mieszkania (id_ogloszenia, powierzchnia, pietro...)

Na stronie głównej pobieram dane tylko z tabeli macierzystej (tj. 'ogloszenia), natomiast przy wejściu w odpowiednią kategorię chciałbym do standardowych danych dodać te charakterystyczne dla danej kategorii. Jak się do tego zabrać? Czy po prostu osobne klasy dla każdego typu ogłoszenia, a w nich metoda getData() pobierająca dane zapytaniem wpisanym ręcznie. Tak bym zrobił standardowo ale jak to zrobić poprawnie w Symfony?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
defrag
post
Post #2





Grupa: Zarejestrowani
Postów: 82
Pomógł: 3
Dołączył: 15.01.2007

Ostrzeżenie: (10%)
X----


Propel dla kazdej tabeli robi model. Wiec przy wejsci w do kategorii mozesz zrobic joina. Dla zwyklego innera sprawa jest prosta bo robisz w Peerze ::doSelectJoinAll, natomiast dla LEFT sprawa sie troche komplikuje:
Przyklad
  1. <?php
  2. public static function doSelectUserWithPersonal(Criteria $c, $con = null)
  3. {
  4. $c = clone $c;
  5. $c->clearSelectColumns();
  6. $c->setLimit(1);
  7.  
  8. UserPeer::addSelectColumns($c);
  9. UserPersonalPeer::addSelectColumns($c);
  10. $c->addJoin(UserPeer::USER_PERSONAL_ID, UserPersonalPeer::ID , Criteria::LEFT_JOIN);
  11.  
  12. $rs = BasePeer::doSelect($c);
  13. $startcol2 = (UserPeer::NUM_COLUMNS - UserPeer::NUM_LAZY_LOAD_COLUMNS) + 1;
  14. $rs->next();
  15.  
  16. $omClass = UserPeer::getOMClass();
  17.  
  18. $cls = Propel::import($omClass);
  19. $obj1 = new $cls();
  20. $obj1->hydrate($rs);
  21.  
  22. $omClass = UserPersonalPeer::getOMClass();
  23.  
  24. $cls = Propel::import($omClass);
  25. $obj2 = new $cls();
  26. $obj2->hydrate($rs, $startcol2);
  27.  
  28. $obj1->setUserPersonal($obj2);
  29. return $obj1;
  30. }
  31. ?>
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: 26.12.2025 - 17:37