Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 5 Dołączył: 10.12.2007 Ostrzeżenie: (0%)
|
Witam.
Mam dwie tabele: Movie, Media, połączone są relacją ManyToMany, więc tak naprawdę mam jeszcze tabele movie__has_media. Chciałbym aby w tabeli łączącej(movie__has_media) Było dodatkowe pole type(będzie przechowywać typ obrazka). Nie chcę mieć tego w tabeli media(nie zawsze typ obrazka jest wymagany) Czy da się takie coś osiągać. Jeśli tak to jak? Jak potem wyświetlić typ obrazka?(Nie jest on przecież ani w tabeli media, ani w tabeli movie) =================== Domyślam się, że można zrobić jeszcze Movie , movie_has_type, movie_has_type_has_media, media, Jednak uważam to za gorsze rozwiązanie.... |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D |
To co chcesz osiągnąc to jedna z "bolączek" SF2, a konkretniej używanej przez ten FW Doctrine2. Da się osiągnąć poprzez ręcznie utworzoną encję tabeli łączącej na zasadzie takich relacji:
Pierwsza tabela: OneToMany z łączącą, Druga tabela: OneToMany z łączącą Łącząca tabela: ManyToOne z pierwszą i ManyToOne z drugą Wtedy w łączącej możesz sobie dawać różne własności, takie jak wspomniany type. Więcej dokładniejszych opisów co i jak masz w google przy: many to many with parameter. EDIT: Ogólnie dla Twojego przypadku zastanawiałbym się, czy jednak nie pchnąć tego do Media z opcją ustawienia type na null. Naprawdę mniej babrania się z tym. Łączeniowa z parametrem w SF2 nie jest fajna do obsługi z racji konieczności pisania wielu dodatkowych metod do obsługi, najczęściej w klasach repozytoriów dla danej encji. Media z reguły sam narzuca jakiego jest typu, nie da się tego wyrzucić poza nawias. Zawsze ma ścisłe przypisanie. Gdyby bylo inaczej, miało by to sens. Przykład? Aplikacja wielojęzyczna. Różni userzy mogą mieć kilka po języków przypisanych, więc jest to typowe many-2-many. Mają jednak określony język defaultowy. Gdyby był jeden dla wszystkich w Languages bezpośrednio, pakowalibysmy to tam do srodka. Ale kazdy user może sobie go na dowolny inny spośród dostępnych ustawić, co z automatu ustawiało by go wszystkim innym userom w systemie (IMG:style_emoticons/default/wink.gif) Albo więc informację o defaultowym pakujemy do Usera bezpośrednio, albo tworzymy tabelę łączącą z językami i tam jako parametr jednego ustawimy na true, co sprawi, iż staje się domyślnym.
Powód edycji: [thek]: Mała uwaga
|
|
|
|
mimol [SF][SF2]Relacja ManyToMany 4.01.2013, 11:22:36
mimol Nie wiem czy kiedykolwiek używałeś https://github.... 4.01.2013, 13:31:39
misi3kk Mam u siebie podobny kod, oparty właśnie o SonataM... 4.01.2013, 19:34:03
m44 Doctrine jako ORM dostarcza tylko kilka podstawowy... 4.01.2013, 21:50:36
HansKlops Witajcie,
mam problem właśnie z takim rozwiązanie... 8.01.2013, 00:52:59 ![]() ![]() |
|
Aktualny czas: 24.12.2025 - 15:10 |