Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Zapisanie obiektu z relacja w Symfony 2
Forum PHP.pl > Forum > Gotowe rozwiązania
swiezak
Witam.
Jestem poczatkujacy, jesli chodzi o prace z frameworkiem SF 2 i mam problem z zapisaniem obiektu do bazy danych.

Utworzylem tabele, ktora przechowuje zamowienia i jest mniej wiecej w takiej postaci:
id
order_payment_id
order_status_id
...

Fragment pliku Orders.php (entity):
  1. /**
  2.   * @Assert\NotBlank
  3.   * @ORM\ManyToOne(targetEntity="Payments", inversedBy="orders")
  4.   * @ORM\JoinColumn(name="order_payment_id", referencedColumnName="id", nullable=false)
  5.   *
  6.   */
  7. protected $orderPaymentId;
  8.  
  9. public function setOrderPaymentId(\Ml\FrontendBundle\Entity\Payments $orderPaymentId)
  10. {
  11. $this->orderPaymentId = $orderPaymentId;
  12.  
  13. return $this;
  14. }
  15.  
  16. public function getOrderPaymentId()
  17. {
  18. return $this->orderPaymentId;
  19. }


Probuje zapisac do bazy danych m.in. id platnosci, ale pojawia sie blad:
  1. Catchable Fatal Error: Argument 1 passed to Ml\FrontendBundle\Entity\Orders::setOrderPaymentId() must be an instance of Ml\FrontendBundle\Entity\Payments, string given...


Fragment kodu PHP, ktory ma to realizowac:
  1. $orderPaymentId = $request->get('pid');
  2.  
  3. $manager = $this->getDoctrine()->getManager();
  4. $order = new Orders();
  5. $order->setOrderPaymentId($orderPaymentId);
  6. $manager->persist($order);
  7. $manager->flush();



Bede wdzieczny za pomoc przy rozwiazaniu powyzszego problemu.
qbson69
W polu $orderPaymentId zbudowana jest relacja z entity Payments i to właśnie obiekt tej klasy trzeba wpisać w to pole. Czyli na podstawie pobranego id, pobieramy z bazy obiekt entity i go wstawiamy do obiektu Orders.

  1. $paymentEntity = $manager->getRepository('MlFrontendBundle:Payments')->find($orderPaymentId);
  2. $order->setOrderPaymentId($paymentEntity);
swiezak
Dzieki serdeczne za pomoc po raz kolejny. Gratuluje wiedzy.
nospor
Swoja droga skadzes ty ten kod wytrzasnal? Skoro pole przechowuje obiekt a nie id, to powinno sie nazywac
$orderPayment
a nie
$orderPaymentId
W manualu symfony oraz doctrine calkiem dobrze jest opisane jak sie buduje relacje
swiezak
Nospor, bo ja jestem taki kombinator ;-) Dopiero poznaje tajniki frameworka, a manuala do konca nie przeczytalem.
nospor
To przeczytaj bo od samego poczatku zaczynasz robic zle rzeczy a to tylko z biegiem czasu bedzie narastac i bedziesz sie bardziej pultal.
Ja ci nie mowie bys od razu czytal caly manual. Masz przeczytac dzial, za ktory sie aktualnie bierzesz
swiezak
Dzieki za sugestie. Zapoznam sie blizej z manualem nt. obiektow i zapisywania ich do bazy danych.

Mam jeszcze takie pytanie - nie bede zakladal nowego watku, aby nie smiecic: w jaki sposob poradzic sobie ze zmasowanym importem produktow z pliku CSV?
LOAD DATA INFILE raczej odpada, bo jest zbyt duzo relacji pomiedzy tabelami. Pozostaje fgetcsv. Ciezko mi znalezc dobry przyklad dla Symfony 2.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.