[Symfony2][Doctrine]dlaczego generate:doctrine:entities nie generuje metod? |
[Symfony2][Doctrine]dlaczego generate:doctrine:entities nie generuje metod? |
6.02.2015, 21:44:20
Post
#1
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 0 Dołączył: 25.11.2014 Ostrzeżenie: (10%) |
Chciałbym wygenerować automatycznie metody dla modeli powiązanych relacjami wg dokumentacji http://symfony.com/doc/current/cookbook/do...ngineering.html .
Robię to komendą generate:doctrine:entities i nic, nie dodaje żadnych metod, mimo że konsola nie wyrzuca błędów. Od początku. Wygenerowałem bazę na podstawie diagramu ER i utworzyłem ją na serwerze. Tę bazę komendą doctrine:mapping:import i doctrine:mapping:convert annotation i doctrine:generate:entities sprowadziłem do projektu Symfony i utworzyłem modele. Dokumentacja mówi, że te komendy nie generują w pełni kodu i trzeba ręcznie dodać parę rzeczy. (If you want to have a one-to-many relationship, you will need to add it manually into the entity or to the generated XML or YAML files. Add a section on the specific entities for one-to-many defining the inversedBy and the mappedBy pieces.) Dodałem brakujące adnotacje relacji OneToMany i zmodyfikowałem relacje ManyToOne . Po tych zmianach uruchomiłem komendę doctrine:generate:entities i w efekcie nie dodał do klas żadnych nowych metod takich jak __construct() czy addxxx(). Co źle robię? Dla przykładu wkleję dwa modele powiązane relacją ManyToOne. Ręcznie dodałem adnotacje OneToMany w klasie Kategoria.php i zmodyfikowałem ManyToOne w klasie Ksiazka.php. ręcznie dodałem kod linii 32-35
modyfikowałem kod linii 78-86
Ten post edytował twojastara 6.02.2015, 22:18:21 |
|
|
6.02.2015, 22:36:25
Post
#2
|
|
Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) |
To są raczej generatory z doctrine, ale nie zmienia to faktu, że nie może tych encji wygenerować skoro już są wygenerowane. Doctrine zwyczajnie w świecie ma bardzo ubogi generator encji, co jest dla mnie zrozumiałe, bo ORM ma mapować obiekty do bazy, a nie bazę do obiektów.
Jeszcze teraz mi się rzucił w oczy getter i setter dla id kategoria, zupełnie niepotrzebne. Interesują nas obiekty a nie ich identyfikatory. Ten post edytował destroyerr 6.02.2015, 22:37:46 |
|
|
6.02.2015, 22:49:55
Post
#3
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 0 Dołączył: 25.11.2014 Ostrzeżenie: (10%) |
ale zdaje się, że komenda doctrine:generate:entities aktualizuje model o dodatkowe metody po dodaniu nowych właściwości?
(Z innej beczki. To jak to się profesjonalnie robi ? Myślałem, że najpierw projektuje się bazę, diagramy a dopiero potem modele w projekcie Symfony. No ale widzę, że w internetach nie wiele tematów dotyczących reverse engineering) Ten post edytował twojastara 6.02.2015, 22:52:50 |
|
|
6.02.2015, 22:58:51
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) |
Myślałem, że najpierw projektuje się bazę, diagramy a dopiero potem modele w projekcie Symfony. Ale diagramu modeli nie można wykonać czy co? // EDIT Proponuję się zapoznać z definicją ORMa Ten post edytował pyro 6.02.2015, 23:00:21 -------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
6.02.2015, 23:02:23
Post
#5
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 0 Dołączył: 25.11.2014 Ostrzeżenie: (10%) |
w szkołach kazali zaczynać od diagramów ER.
To od czego Wy rozpoczynacie projekty (proste), od pisania klas modeli? ---- No dobrze, ale wracając do istoty. Gdzie jest błąd, że komenda generate:doctrine:entities nie generuje metod __contruct i addXXX() w modelu Kategoria ? ---- Z podręcznika Gajdy: Użycie relacji 1:n w Symfony 2 W Symfony 2 relacje 1:n definiujemy adnotacjami: @ORM\OneToMany(...) @ORM\ManyToOne(...) W klasie Entity odpowiadającej tabeli źródłowej dodajemy adnotację @ORM\OneToMany , a w klasie odpowiadającej tabeli docelowej ? adnotację @ORM\ManyToOne . Powiązanie tabel kontynent oraz panstwo jest zilustrowane na listingach 32.2 oraz 32.3.
Po dodaniu w klasach Kontynent oraz Panstwo właściwości z listingów 32.2 oraz 32.3 wydajemy polecenie: php app/console generate:doctrine:entities My Spowoduje ono dodanie w klasie Kontynent metod przedstawionych na listingu 32.4 oraz w klasie Panstwo metod przedstawionych na listingu 32.5.
Ten post edytował twojastara 7.02.2015, 00:25:26 |
|
|
7.02.2015, 12:37:06
Post
#6
|
|
Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) |
Odświeżyłem swoją wiedzę na temat generowania encji. Skorzystaj z pomocy tego polecenia i zobaczysz opcje takie jak: update-entities i regenerate-entities.
|
|
|
7.02.2015, 17:58:59
Post
#7
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 0 Dołączył: 25.11.2014 Ostrzeżenie: (10%) |
w helpie doctrine:generate:entities?
nic tam nie widzę o tym co piszesz. |
|
|
8.02.2015, 10:23:09
Post
#8
|
|
Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) |
Na ten problem ciężko jest podać rozwiązanie, bo nie wiadomo, czy nie możesz otworzyć tej pomocy, czy nie rozumiesz angielskiego czy jest jakiś inny powód. Tutaj też nie widzisz nic na ten temat?
|
|
|
17.02.2015, 15:58:23
Post
#9
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 0 Dołączył: 25.11.2014 Ostrzeżenie: (10%) |
dzięki, sprawdzę to na pewno (później).
"Skorzystaj z pomocy tego polecenia i zobaczysz opcje takie jak: update-entities i regenerate-entities."
u mnie użycie komendy
powoduje
ale, tak jak piszesz, istnieje i w moim projekcie klasa z opcjami update i regenerate
|
|
|
24.02.2015, 20:51:15
Post
#10
|
|
Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) |
Oj, przepraszam, nie zauważyłem, że symfony ma swój generator encji.
|
|
|
25.02.2015, 15:37:19
Post
#11
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 30 Dołączył: 22.01.2007 Ostrzeżenie: (0%) |
Troszkę się chyba wyłamałeś tworząc strukturę projektu w klasach masz
namespace AppBundle\Entity; gdzie indziej piszesz \My\FrontendBundle\Entity Powiedz dokładnie jaka jest ściezka do klasy co chcesz zrobic update, i wywal wszystkie metody get i set przy tym co sie nie robi update i wywołaj bez żadnych parametrów dodatkowych php app/console doctrine:generate:entities My (jezeli twój entityjest pod srv/My/FrontendBundle/Entity) nie generate:doctrine:entities Pozdrawiam Ten post edytował prz3kus 25.02.2015, 15:39:24 |
|
|
Wersja Lo-Fi | Aktualny czas: 13.05.2024 - 21:06 |