![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 159 Pomógł: 0 Dołączył: 21.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
Mam problem z zapisem id zalogowanego uzytkownika do tabeli z zamowieniami.
Ponizej uproszczona struktura bazy danych:
Ml\UserBundle\Entity\User.php
Ml\FrontendBundle\Entity\Orders.php
Fragment kodu w kontrolerze obslugujacym zamowienia:
Podczas próby zapisu id użytkownika dostaję monit: "Argument 1 passed to Ml\FrontendBundle\Entity\Orders::setUserId() must be an instance of Ml\FrontendBundle\Entity\Orders, instance of Ml\UserBundle\Entity\User given, called in Ml\OrderBundle\Controller\DefaultController.php" Gdzie robię błąd? Proszę o pomoc. Ten post edytował swiezak 15.01.2016, 21:00:45 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 144 Dołączył: 22.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
1. public function setUserId(\Ml\FrontendBundle\Entity\Orders $userId)
Jak widać, $userId ma być obiektem typu Orders, co sam php mówi Możesz usunąć (jeśli nie dokonywałeś modyfikacji) gettery i settery i wygeneruj ponownie przez doctrine:generate:entities oraz sprawdzaj poprawność relacji przez doctrine:schema:validate 2. Wystarczy że przekażesz $setUser($this->getUser()), nie musisz ponownie wygrzebywać użytkownika z bazy. 3. Nie robi się setUserId tylko robisz relację dla User (set/getUser()) <-> Order (getOrders(), addOrder(), removeOrder()), |
|
|
![]() ![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 159 Pomógł: 0 Dołączył: 21.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dziekuje za pomoc.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 872 Pomógł: 94 Dołączył: 31.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
W kontrolerze masz:
Jest taka zasada, że funkcje z przedrostkiem get muszą zwrócić to, co powinny, a jeśli nie są w stanie, to powinny rzucić wyjątek. Jest też zasada mówiąca o tym, że funkcje z przedrostkiem find w przypadku, gdy nie znajdą tego, co powinny zwracają null. Powinienieś to obsłużyć rzucając wyjątek NotFoundException w przypadku braku tych obiektów w bazie. W przeciwnym przypadku dla id wpisanego złośliwie np. "abc" w $order->setOrderPaymentId($paymentEntity); ustawisz null, a chyba tak nie powinno być. Żeby uniknąć rzeźbienia ifów możesz użyć np. adnotacji @ParamConverter. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 11:37 |