Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF][Symfony2] Podejście do sortowania encji
Forum PHP.pl > Forum > PHP > Frameworki
Foxx
W jaki sposób w Symfony2 rozwiązuje się problem sortowania w przypadku encji połączonych relacją?
Konkretnie: mamy książki i katalogi w relacji jeden do wielu. Książki są przypisane do katalogów i chciałbym książki posortować w każdym katalogu inaczej.
Crozin
Symfony tego w żadnej sposób nie rozwiązuje, ponieważ Symfony ma niewiele wspólnego z bazami danych. Tym zajmuje się u Ciebie zapewne Doctrine. W DQL-u Doctrine'a za sortowanie odpowiada klauzura ORDER BY, dokładnie tak samo jak w SQL-u.
Foxx
Ale wiesz, nie miałem na myśli tej części problemu sortowania, chodzi mi raczej o to, że nie wiem gdzie w opisanej sytuacji umieścić pole "position" skoro do dyspozycji mam tylko encje Ksiazka i Katalog, a chcę posortować dla każdego katalogu inaczej. W SF 1.x umieściłbym takie pole w tabeli relacyjnej przechowującej informacje o powiązaniach książek z katalogami, a w SF2 chyba nie ma takiej możliwości bo tabela relacyjna powstaje automatycznie, nie tworzę jej explicite.
Crozin
Jeżeli relacja zawiera jakieś dodatkowe dane (tutaj: pozycja) powinieneś skorzystać z podwójnej relacji jeden-do-wielu.
Foxx
Czy masz na myśli OneToMany Bidirectional?
Korzystam z takiej relacji, ale nie wiem gdzie mógłbym tam umieścić dodatkową informację o pozycji. W takiej relacji tabela relacyjna tworzona jest automatycznie i wygląda to na pierwszy rzut oka tak, że nie mogę wpłynąć na jej kształt...
Crozin
Nie, pisałem o podwójnej relacji, a nie relacji dwukierunkowej. Chociaż obie relacje będą w tym przypadku dwukierunkowe.
Kod
Katalog (id, nazwa) <--> KatalogKsiązka (id, id_katalog, id_ksiązka, pozycja) <--> Książka (id, nazwa)
Foxx
Czyli można powiedzieć, że dopóki tablica relacyjna służy tylko do przechowania informacji o relacji to mogę pozwolić żeby zajmował się nią automatycznie Doctrine/Symfony, a jeżeli chcę tam umieścić dodatkowe pola to samodzielnie tworzę encję, żeby móc wpływać na jej kształt?
Crozin
Dokładnie tak. W momencie, w którym potrzebujesz jakiś dodatkowych danych przy relacji pomiędzy encjami powinieneś zrezygnować z pojedynczej relacji ManyToMany na rzecz kombinacji ManyToOne + OneToMany z pośredniczącą encją pomiędzy.
Foxx
Wielkie dzięki!
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.