![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Czemu ponizszy zapis danych do bazy nie dziala ?
Blad ktory otrzymyje jest nastepujacy:
Relacje miedzy encja Type i Match mam taka:
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Szybkie pytanie: co jest niezrozumiałe w treści wyjątku, który podaje Ci dwa możliwe rozwiązania problemu?
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 182 Pomógł: 9 Dołączył: 30.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
szybka odpowiedz
![]() |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Ok, dodalem:
i udalo sie ... faktycznie nie doczytalem komunikatu, ktory przeciez jasno pisal co trzeba zrobic. ale nie wiem czemu do bazy nie zostal dodany rekord do tabeli Type o match_id = 3 tylko o match_id = 41 (zainkrementowalo mi match_id ) a wskazalem przeciez w kodzie ze ma zostac dodany rekord z match_id = 3 :
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 965 Pomógł: 285 Dołączył: 19.06.2015 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
get to nie set.
Ale jesli ten match juz istnieje w bazie to chyba powinienes go pobrac
Ten post edytował kapslokk 23.03.2016, 11:50:22 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 144 Dołączył: 22.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Szybkie pytanie: co jest niezrozumiałe w treści wyjątku, który podaje Ci dwa możliwe rozwiązania problemu? Podpowiadam Kod To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(..,cascade={"persist"}).
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
nie ma takiej metody w mojej encji Match jak setId()
to chyba nie tak sie robi ... Tak - takie $match o ID = 3 juz istnieje dlatego chcialem pobrac getId() rozumiem ze musze to zrobic tak:
i nie ma innej drogi ![]() zastanawia mnie tylko dlaczego kolega wczesniej prosil/ostrzegal zeby zapisu nie robic w konrolerze ![]() Ten post edytował damianooo 23.03.2016, 11:56:00 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 965 Pomógł: 285 Dołączył: 19.06.2015 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
No bo tak jak Ci napisałem, nie powinieneś tego ustawiać ręcznie tylko pobrać z bazy istniejący rekord / zdać się na auto_increment;
getId() jak i cała reszta getterów służy do pobrania wartości z konkretnego obiektu, a nie obiektu z bazy na podstawie tej wartości. Cytat zastanawia mnie tylko dlaczego kolega wczesniej prosil/ostrzegal zeby zapisu nie robic w konrolerze smile.gif ... rozumiem ze chodzi o ograniczenie linii kodu ? Nie mam pojęcia, ktoś mądrzejszy sie musi wypowiedzieć. |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat ale nie wiem czemu do bazy nie zostal dodany rekord do tabeli Type o match_id = 3 tylko o match_id = 41 (zainkrementowalo mi match_id ) Zapewne dla właściwości @Id masz ustawione automatyczne generowanie wartości (@GeneratedValue(AUTO)). Wtedy Doctrine zignoruje ręcznie ustawioną wartość przez setId(x).Cytat nie ma takiej metody w mojej encji Match jak setId() Jeżeli decydujesz się na ręczne bądź półautomatyczne (np. przy pomocy sekwencji) nadawanie ID-ków, to taką metodę setId() jak najbardziej możesz czy wręcz musisz mieć. Generalnie nawet jeżeli ID-ki generowane są wyłącznie przez bazę danych metoda setId() wiele nie wadzi, a przy pisaniu testów może się przydać.to chyba nie tak sie robi ... Cytat zastanawia mnie tylko dlaczego kolega wczesniej prosil/ostrzegal zeby zapisu nie robic w konrolerze (IMG:style_emoticons/default/smile.gif) ... rozumiem ze chodzi o ograniczenie linii kodu ? Liczba linii kodu jest bez znaczenia. Chodzi po prostu o to, że kontroler to nie miejsce dla ORM-a, który raczej powinien być użyty dopiero gdzieś głęboko w warstwie przetwarzania danych, czy właściwie dostępu do danych. Ale nie zawsze potrzebujemy takiej separacji kodu, na różne warstwy stąd Symfony udostępnia "łatwy" dostęp do Doctrine'a wewnątrz kontrolerów dziedziczących po Symfony\Bundle\FrameworkBundle\Controller\Controller.
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 182 Pomógł: 9 Dołączył: 30.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
podpowiem: przypuśćmy, że chcesz dokładnie te samą operację wykonać w symfonowym commandzie. naturalnie, skopiujesz i przekleisz ten kod. co lepsi nawet rejestrują kontroler jako serwis i wywołują te akcje. Ale zawartość akcji Twojego kontrolera jest aplikacją samą w sobie, można jej fragment wydzielić i po prostu użyc: w kontrolerze, w commandzie, a co najwazniejsze - w teście
![]() ps. spróbuj przetestować np. jednostkowo te akcje kontrolera. ps2. bo testujesz, prawda? ![]() ps3. przypuścmy sytuację, że pojawia się nowa niekompatybilna wstecz wersja frameworka LUB chcesz zmienić framework. Też kapa przy Twoim podejściu ![]() Generalnie: jest wiele powodów, żeby tak nie robić, niewiele powodów by tak robić ![]() Ten post edytował uirapuru 23.03.2016, 13:20:54 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
ok dzieki za uwagi ... przemysle to sobie ... chce to robic dobrze wiec bede o tych uwagach pamietal.
Pozdrawiam |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 20.06.2025 - 22:13 |