Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Statystyki Sportowe
Forum PHP.pl > Forum > PHP > Object-oriented programming
marins
Zawodnik - Tabela_A i Obiekt_A
Przypisanie zawodnika do drużyny - Tabela_B i Obiekt_B
Przypisanie zawodnika do meczu - Tabela_C i Obiekt_C


Oczywiście Tabele są ze sobą powiązane:

Tabela_A.player_id = Tabela_B.player_id
Tabela_B.match_id = Tabela_C.match_id
Tabela_C.pos_id


Sytuacja wygląda następująco.

W profilu zawodnika znam id z Tabeli A.
W spisie drużyny znam id z Tabeli B
W samym meczu znam id z Tabeli C.


Jak widać, nie zawsze znam na starcie id z tabeli_A,
Czasami muszę wyciągać je z Obiektu_B i potem Obiektu_A.

Pytanie:
Jak ugryźć to poprawnie, aby wszystko wyglądało w pełni OOP i nie sprawiało w przyszłości problemu

Wariant I.
  1. $A = new A();
  2. $B = new B();
  3. $C = new C();
  4.  
  5. $A->set_id(1)->load_data();
  6. $B->set_player_id( $A->get_id() )->load_data();
  7.  
  8. echo $A->get_name() . ' '. $B->get_nr();
  9.  
  10. $C->set_player_id($B->get_match_id())->load_data();
  11. echo $C->get_min();


Wariant II.
  1. wychodząc z meczu:
  2. $C = new C();
  3. $C->set_id (666)->load_data();
  4.  
  5. $C->match_obj
  6. ->set_match_id($C->get_id) //zwracamy obiekt B
  7. ->load_data_by_match_id()
  8. $C->player_obj
  9. ->set_id($C->match_obj->get_player_id()) //zwracamy obiekt A
  10. ->load_data();
  11.  
  12.  
  13. echo $C->get_min();
  14. echo $C->player_obj->get_name() . ' '. $C->match_obj->get_nr();


Czy może jeszcze inaczej?

Nie chodzi mi o to, że ktoś z szanownego Grona napisze za mnie ten kod, chodzi raczej o wskazanie właściwej drogi.
Kedan
Tabele SQL:
  1. players [id, name, team_id] //relacja 1-do-wielu: drużyna może mieć wielu graczy, gracz tylko jedną drużyną
  2. teams [id, name]
  3. games [id, name]
  4.  
  5. teams_games[team_id,game_id] //relacia wiele-do-wielu

W Kohanie, przy pomocy ORM załatwia to się mniej-więcej tak:
Ad. 1.
  1. $player = new Player()->where('name','=','Jan Kowalski')->find();
  2. $team = $player->team->find();
  3. $games = $team->games->find_all();


Ad. 2.
  1. $game = new Game()->where('name','=','Liga Mistrzów')->find();
  2. $teams = $game->teams->where('id','=',$game->id)->find_all();
  3. $players = array();
  4. foreach($teams as $team) {
  5. $player[$team->name] = $team->players->find_all();
  6. }

marins
Sposób pobrania danych jest obojętny.

Ale rozumiem, iż należy trzymać się kilku obiektów (Wariant I), aniżeli 1 obiektu z podobiektami (Warian II)
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.