Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony2][SF][SF2]mapowanie asocjacji
Forum PHP.pl > Forum > PHP > Frameworki
damianooo
Witam,

Mam entity:

  1. class Team {
  2. private $id;
  3. private $name;
  4. ...
  5. }

i
  1. class Meet {
  2. private $id;
  3. private $team1 (foreign key , id_team);
  4. private $team2 (foreign key , id_team);
  5. ...
  6. }


Potrzebuję zrobić "Podwójną relację/złączenie do tej samej (innej) tabeli" .

W sieci nie mogę jednak znaleźć jak to się robi w Symfony2
Crozin
1. Temat nie ma najmniejszego związku z Symfony, dotyczy stricte Doctrine - domyślam się, że tego ORM-a używasz. Dwa osobne projekty...
2. Ale w czym masz problem? Dwa razy po prostu dajesz relację ManyToOne, wskazując w parametrze targetEntity klasę Team.
3. Nie używaj określeń team1, team2 tylko jakoś opisz. Nie wiem czym jest ten "meet", ale zapewne istnieje jakieś "milsze" określenie obu zespołów w tym kontekście.
damianooo
ad 1) Tak, dotyczy Doctrine smile.gif

ad 3) Meet - chodzi o Mecz pomiędzy dwoma drużynami . Meet - tutaj jako spotkanie ... Match wolałem nie dawać bo ta nazwa jest globalnie wykorzystywana w innym kontekście


ad 2)
Tutaj nie muszę tworzyć (nie powinienem) relacji dwukierunkowej ?
W Entity Team nie muszę tworzyć relacji OneToMany ?
Pytam ponieważ mialem problem z tym jak opisać adnotacjami taką relację w encji Team.
Crozin
Ad. 3) Od tego właśnie masz przestrzenie nazw by korzystać z normalnych nazw. Ręki sobie uciąć nie dam ale meet ni cholery nie będzie w tym kontekście synonimem dla meczu/rozgrywki.
Ad. 2) To czy relacja będzie dwu- czy jednokierunkowa to osobna kwestia. (pseudokod)
  1. class Team {
  2. @Id
  3. private $id;
  4.  
  5. @Column
  6. private $name;
  7.  
  8. // opcjonalne, jeżeli chcesz relację dwukierunkową - raczej zbędną?
  9. //@OneToMany(targetEntity=Match, mappedBy=hostTeam)
  10. //private $hostedMatches = new ArrayCollection();
  11. //
  12. //@OneToMany(targetEntity=Match, mappedBy=guestTeam)
  13. //private $guestedMatches = new ArrayCollection();
  14. }
  15.  
  16. class Match {
  17. @Id
  18. private $id;
  19.  
  20. @ManyToOne(targetEntity=Team) // jeżeli jednak będzie dwukierunkowa relacja, to tutaj dodaj jeszcze inversedBy=hostedMatches)
  21. @JoinColumn(nullable=false)
  22. private $hostTeam;
  23.  
  24. @ManyToOne(targetEntity=Team) // analogicznie jak wyżej
  25. @JoinColumn(nullable=false)
  26. private $guestTeam;
  27. }
kpt_lucek
@Crozin

Do tego dochodzi jeszcze mappedBy i inversedBy smile.gif
damianooo
Dzięki Crozin , działa.
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.