Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Mapowanie interfejsów w Doctrine
fifjak
post
Post #1





Grupa: Nieautoryzowani
Postów: 6
Pomógł: 0
Dołączył: 19.05.2014

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


Taka sytuacja. Powiedzmy że chcecie zrobić następującą strukturę encji:
1. Klasa A implementuje interface I
2. Klasa B implementuje interface I
3. Klasa C

Klasa C posiada jakieś własności, wśród których jedna z nich może przechowywać instancje obiektu klasy A lub instancje obiektu klasy B, czyli ustawiam sobie typ tej własności w klasie C na interface I. Problem pojawia się w momencie, kiedy chcę pobrać dane z DB ponieważ muszę w yaml'u zdefiniować jaki obiekt powinien zostać utworzony podczas ustawiania tej własności. Jeśli ustawię tam typ na klasę A to zawsze będzie tam tworzyć obiekty klasy A - tak samo z klasą B. Nie mogę podać tam interface'u I, bo jak każdemu wiadomo, nie można napisać "new I".

Co powiedzieć doctrine, żeby on wiedział jaki obiekt ma utworzyć - A lub B. Wydaje mi się, że powinien tu zostać utworzony złożony klucz obcy (ID oraz typ, który będzie określać jaka klasa powinna zostać wykorzystana do utworzenia obiektu). Jak to wszystko skonfigurować, żeby doctrine utworzył taki klucz?
Go to the top of the page
+Quote Post
adbacz
post
Post #2





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Jeśli masz aż taką zależność, to śmiem twierdzić, że wczesniej podeszłeś do problemu troszkę inaczej, niż można było to rozwiązać, i teraz wyszedł kolejny problem.

Podałeś powyżej przykład bez podawania jego konkretnego zastosowania. Mógłbyś napisać czym tak na prawdę są te klasy i czym się zajmują? Może zamiast rozwiązywać ten problem, można sprawić, żeby zniknęła jedna z tych klas (jeśli w ogóle się da) - w tedy nie będzie tego problemu.
Go to the top of the page
+Quote Post
fifjak
post
Post #3





Grupa: Nieautoryzowani
Postów: 6
Pomógł: 0
Dołączył: 19.05.2014

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


W porządku, konkretne zastosowanie.

Temat to plany pracy. Na planie znajdują się jakieś zadania. "Obsługą" tych zadań może zajmować się pojedyncza osoba lub grupa osób - nazwijmy ich właścicielami zadań. W kodzie pojedynczą osobę reprezentuje klasa A, a grupę klasa B. Obie klasy różnią się między sobą. Teraz potrzebuję gdzieś wyświetlić informację o właścicielu. Żeby uniknąć sytuacji typu if ($wlasciciel instanceof KlasaA){....}else if($wlasciciel instanceof KlasaB) itd., chcę zrobić interfejs, który będę implementować w tych dwóch klasach i w każdej nowej, która by jeszcze mogła powstać. W ten sposób, kod za pomocą którego wyświetlamy informacje o właścicielu nie będzie się zmieniać pod wpływem dodania nowego typu właściciela zadania i nie będzie wymagał dodatkowych modyfikacji testów jednostkowych.

Dopowiem jeszcze, że ten problem mam w symfony 2.
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%)
-----


Musisz skorzystać z dziedziczenia (na poziomie Doctrine'a). Szczerze, nie jestem pewien czy mechanizm ten zadziała wyłącznie na samych interfejsach bez bezpośredniego dziedziczenia w PHP, ale powinien dać radę. http://doctrine-orm.readthedocs.org/en/lat...ce-mapping.html
Go to the top of the page
+Quote Post
fifjak
post
Post #5





Grupa: Nieautoryzowani
Postów: 6
Pomógł: 0
Dołączył: 19.05.2014

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


@Crozin, sprawdzę co i jak i dam znać smile.gif
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: 21.08.2025 - 19:44