![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 9 Dołączył: 20.09.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Ostatnio napotkałem się na mały problem odnośnie dziedziczenia w Doctrine 2(SINGLE_TABLE). Mam tabelę `product` a w niej typ produktu `sell`, 'buy', 'sell-buy'. Chciałem sobie zrobić dziedziczenie na podstawie tych typów. Wszystko śmiga. Problem pojawia się w tedy gdy edytuję np Product\Sell i chciałbym go zmienić na Product\Buy, a disciminator column nie może się pojawić w klasie Product, chyba sam doctrine zmienia to pole na podstawie nazwy klasy. Kombinowałem na taki sposób, że kopiowałem dane z obiektu Sell do obiektu Buy(wraz z id) ale doctrine tworzy mi nowy rekord. Zastanawia mnie jak to dziedziczenie ma się do modyfikacji danych. Pozdrawiam (IMG:style_emoticons/default/smile.gif) Ten post edytował Fluke 3.09.2013, 20:10:55 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Takie coś nie ma najmniejszego sensu (czy to w kontekście ORM-a czy ogólnie OOP), więc Doctrine nie wspiera czegoś takiego.
2. Jeżeli dany produkt może mieć stan "na sprzedaż", "kupię" bądź oba na raz, czy nie powinna to być zwykła właściwość obiektu, a nie typ? 3. Opisz dokładniej swój model danych. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 9 Dołączył: 20.09.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Chciałem sobie zrobić coś w ten styl.
Mam faktury i te faktury mogą być typu sprzedaż bądź kupno i w zależności od tego jaką fakturę tworzymy takiego typu produkty możemy do niej dodawać. Czyli jeśli mamy fakturę typy sprzedaż to możemy dodać produkty typu sell a jak kupno to produkty typu buy. Wydawało by mi się to sensowne i na jakimś poziomie kontrolowane.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Takie coś, to miejsce na użycie typów generycznych - niestety PHP ich nie wspiera.
2. Dlaczego w ogóle chcesz nagle zmieniać w swojej aplikacji typ obiektu (pomijając już w ogóle Doctrine i bazy danych) - jak już pisałem nie jest to normalna operacja z punktu widzenia OOP. Właściwie jedyne rozwiązanie jakie przychodzi mi do głowy to ręczne wykonanie zapytania zmieniającego wartość kolumny disciminator oraz ręczne zajęcie się wszelkim możliwymi konsekwencjami tego (usunięcie/zmodyfikowanie obiektów z relacji). |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.09.2025 - 20:55 |