Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony] Trochę bardziej złożony JOIN
vonski
post
Post #1





Grupa: Zarejestrowani
Postów: 292
Pomógł: 89
Dołączył: 27.12.2006
Skąd: Warszawa

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


Moich problemów ze złączeniami w Symfony ciąg dalszy (IMG:style_emoticons/default/smile.gif)

Mam takie tabele:

rider:
id
name

success:
id
rider_id
event_id
position

event:
id
compet_id

compet:
id
name

Tablea `rider` przechowuje dane o zawodnikach, `success` przechowuje dane o osiągnięciach poszczególnych zawodników, czyli jeden zawodnik może mieć kilka sukcesów, ale jeden sukces może być przypisany tylko do jednego zawodnika. Dalej - w `success` mamy jeszcze `event_id` - odwołuje się do pola `id` tabeli `event` - jest to tabela przechowująca dane poszczególnej imprezy sportowej. Na koniec mamy jeszcze `compet`, czyli tabelę przechowującą tak jakby kategorie rozgrywek (grand prix, mistrzostwa polski, europy itp.).
I teraz... chciałem zrobić takie złączenie żeby na podstawie `id` zawodnika zwracane były jego sukcesy, wraz z opisami imprez do których te sukcesy się odnoszą oraz z nazwami kategorii do których te imprezy przynależą.
Zapytanie SQL wyglądało by chyba mniej więcej tak:

  1. SELECT * FROM success INNER JOIN event ON (success.event_id = event.id) INNER JOIN compet ON (event.compet_id = compet.id) WHERE success.rider_id = '$jakieś_tam_id'


Czy może mnie ktoś naprowadzić mniej więcej jak się do tego zabrać? (IMG:style_emoticons/default/smile.gif)
Dodam, że chcę, aby te informacje pokazywały się w widoku 'rider'. I generalnie problem jest taki, że w klasie 'RiderPeer' nie mogę się odwołać (chyba?) do klasy np. 'SuccessPeer'.

Ten post edytował vonski 5.09.2009, 11:12:20
Go to the top of the page
+Quote Post
-=Peter=-
post
Post #2





Grupa: Zarejestrowani
Postów: 304
Pomógł: 51
Dołączył: 4.02.2005
Skąd: Kraków

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


  1. $c = new Criteria();
  2. $c->addJoin(SuccessPeer::EVENT_ID, EventPeer::ID)
  3. ->addJoin(EventPeer::COMPET_ID, CompetPeer::ID)
  4. ->add(SuccessPeer::RIDER_ID, $id);
  5.  
  6. $results = SuccessPeer::doSelectXxx($c);

musisz napisać metodę doSelectXxx, która złoży z wyniku zapytania odpowiednią hierarchię klas, zobacz jak wygląda metoda doSelectJoinAll i zrób coś na ten wzór.
Go to the top of the page
+Quote Post
vonski
post
Post #3





Grupa: Zarejestrowani
Postów: 292
Pomógł: 89
Dołączył: 27.12.2006
Skąd: Warszawa

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


Działa, dzięki (IMG:style_emoticons/default/smile.gif) tak to napisałem:

  1. static public function getSuccessById($id)
  2. {
  3. $c = new Criteria();
  4. $c->addJoin(self::EVENT_ID, EventPeer::ID, Criteria::LEFT_JOIN);
  5. $c->addJoin(EventPeer::COMPET_ID, CompetPeer::ID, Criteria::LEFT_JOIN);
  6. $c->add(self::RIDER_ID, $id, Criteria::EQUAL);
  7.  
  8. return SuccessPeer::doSelectJoinEvent($c);
  9. }


A najlepsze, że kilkadziesiąt minut mi to nie chciało działać - cały czas wyskakiwał mi błąd, że nie rozpoznaje w ogóle tych klas - SuccessPeer, EventPeer itd. A się okazało, że wystarczyło w linii poleceń napisać 'symfony cc' i dopiero później stworzyć model (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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: 23.12.2025 - 08:03