Wpis z mikrobloga

#symfony #doctrine #php
Mam problem z doctrine/konfiguracją.
Mam encję Order oraz powiązane manyToOne User i Shipping. Ustawiam istniejące encje User i Shipping w obiekcie Order i po persist($order) + flush dodaje mi nowy wpis w Shipping oraz w User. Jeśli mam cascade: ["persist"] w konfiguracji to chce dodać rekord, jeśli tego nie mam to rzuca mi wyjątkiem, że albo mam skonfigurować albo zrobić ręcznie persist(). Encje są powiązane, ale nie rozumiem dlaczego do Order nie wpisuje istniejącego ID Usera i ID Shipping...

https://pastebin.com/q5EfLRPb
  • 11
  • Odpowiedz
@zakopiak: z repository. Kod jest dość długi, bo Order to rozbudowana encja. Robię setUser i setShipping podając jako argumenty odpowiednie encje a potem $em->persist($order); $em->flush(); Początkowo Usera brałem z getUser() w kontrolerze i przez service ustawiałem, ale potem zmieniałem na UserManagera z FOSUserBundle. Ale Shipping cały czas z repo i dzieje się to samo...
  • Odpowiedz
@masterix: bez kodu trudno będzie nam coś wywróżyć, bo mi się pakiet u wróża Macieja skończył (,) wrzuć kod encji i kontrolera to będzie łatwiej
  • Odpowiedz
@zakopiak: Jest przypisane, to jest inny krok w kontrolerze, dlatego w tym fragmencie tego nie widać. https://pastebin.com/CVUvhcWq tu jest fragment z setShipping. $data['shipping'] zawiera ID. Jest tu trochę bałagan, bo to przed uporządkowaniem większość, a jak mi nie działało zgodnie z oczekiwaniem to zacząłem kombinować i jeszcze więcej tu namotałem.
  • Odpowiedz
@masterix: Postawię diagnozę domyślając się niektórych rzeczy. ;-)

Widzę, że obsługujesz to wszystko sesją, więc domyślam się, że cały proces nie dzieje się w jednym żądaniu, tylko jest rozłożone na kroki (jakiś formularz kilku-krokowy czy coś).
A więc wyciągasz Shipping i Usera z repo, przypisujesz do ordera, ale zapis jest w późniejszym żądaniu i tu masz problem.

Wyciągając obiekt order (wraz z przypisanymi zależnościami) z sesji w nowym żądaniu powoduje, że z punktu widzenia User i Shipping wzięły
  • Odpowiedz
@zakopiak: Próbowałem to zrobić w jednym kroku kontrolera i też mi coś nie pykało, ale dzięki za tip - przyjrzę się temu jeszcze raz.

Z formularzem masz rację, nie zauważyłem.
Dzięki za pomoc :)
  • Odpowiedz
@zakopiak: W ogólności raczej to było problemem. Gdy za pierwszym razem sprawdzałem to robiąc cały zapis w jednej akcji kontrolera to musiałem coś spieprzyć, że mi też nie pykło. Dzięki za pomoc
  • Odpowiedz