Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony2][SF][SF2]mapowanie asocjacji, mapowanie na rekordy z tej samej tabeli
damianooo
post
Post #1





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


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

Ten post edytował damianooo 12.11.2015, 13:24:37
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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.

Ten post edytował Crozin 12.11.2015, 14:15:58
Go to the top of the page
+Quote Post
damianooo
post
Post #3





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


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.

Ten post edytował damianooo 12.11.2015, 14:48:05
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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


Ten post edytował Crozin 12.11.2015, 14:57:35
Go to the top of the page
+Quote Post
kpt_lucek
post
Post #5





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

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


@Crozin

Do tego dochodzi jeszcze mappedBy i inversedBy smile.gif


--------------------


Cytat
There is a Bundle for that
Lukas Kahwe Smith - October 31th, 2014
Go to the top of the page
+Quote Post
damianooo
post
Post #6





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


Dzięki Crozin , działa.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 08:17