![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 176 Pomógł: 0 Dołączył: 8.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Mam problem z dostosowaniem środowiska pod moje wymagania.
Używam mysql-workbench-exporter do generowania klas annotation entities w katalogu Entity. I teraz próbuje stworzyć mechanizm podobny do tego używanego w symfony 1.4. Exporter generuje klasy, ja natomiast chcę po tych klasach dziedziczyć i rozszerzać je według potrzeb. Chcę uczynić ten proces w pełni automatycznym: 1. Generowanie klas Entities z workbencha, 2. Update schemy, 3. Zmiany manualne w klasach dziedziczących. Poniżej przykład tego co chcę osiągnąć: 1. Plik generowany z workbencha:
2. Plik dziedziczący po ArticleBase:
Pojawił mi się problem... A mianowicie ogólnodostępny exporter workbencha, co udało mi się przeanalizować (może nie zauważyłem tam jakiejś opcji) generuje tylko klasy z domyślną nazwą (nie można wymusić żeby zamiast Article wygenerował nazwę ArticleBase), co niestety nie pozwala na prawidłowe działanie Entities (klasa instancji domyślnie musi mieć zawsze nazwę Article). I teraz pytanie. Czy ktoś już kiedyś zastanawiał się nad takim problemem i znalazł rozwiązanie? Może istnieje jakiś prostszy sposób na to? Może można w inny sposób dojść do tego samego? Bo inaczej to zostaje już tylko grzebanie w kodzie tego exportera... Zastanawia mnie też dlaczego nigdzie nie mogę znaleźć tak typowego przykładu z dziedziczeniem klas entities jako podstawowego rozwiązania dla modelu... Mieszanie w podstawowych klasach jest dobre, jak model jest tworzony bezpośrednio z pliku annotations, ale dla źródeł zewnętrznych bez klasy bazowej raczej się nie obejdzie... Dodatkowo jeszcze prośba o zweryfikowanie powyższych klas, bo wyrzuca błąd przy SQL w mapowaniu klasy. W kontrolerze korzystam z kodu:
An exception occurred while executing 'INSERT INTO Article (title) VALUES (?)' with params {"1":"aa"}: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'livesoft_test.Article' doesn't exist Zaznaczam, że bez dziedziczenia problem nie występuje. Prośba o poprawienie kodu, bo już nie wiem w czym jest problem. Jeszcze raz trzeba te annotacje dot. klasy pisać? Ten post edytował blackroger 17.12.2012, 03:29:40 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Być może ten wątek pozwoli odpowiedzieć na Twoje pytania. Odsyłam również do dokumentacji Doctrine. Zwróć uwagę, że "mapped superclass cannot be an entity", zatem adnotacje @ORM\Entity i @ORM\Table powinieneś przenieść do klasy Article.
Jeśli chodzi o WORKBENCH-a to nie znalazłem pluginu, którego nazwę wymieniłeś. Znalazłem natomiast mysql-workbench-schema-exporter, ale jest to świeży projekt i raczej nie ma zaimplementowanych wszystkich funkcjonalności. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 176 Pomógł: 0 Dołączył: 8.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ok rozumiem... dzięki... rzeczywiście nie zauważyłem tego: "mapped superclass cannot be an entity". Nadpisanie klasy dziedziczącej parametrami dot. entity załatwia sprawę. Jeżeli chodzi o exportera to tak masz rację, chodzi o mysql-workbench-schema-exporter. Przejrzałem tamten kod i dodałem przy generowaniu frazę MappedSuperclass oraz pozmieniałem Article -> ArticleBase.
Dzięki za pomoc. Tak jak napisałem dziwię się nadal, że w sf2 nie opracowano jeszcze tak przydatnego mechanizmu generowania schemy z klasami bazowymi... W sf1 działało to idealnie. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 26.06.2025 - 09:32 |