Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL] Zapisanie obiektu z relacja w Symfony 2
swiezak
post 11.01.2016, 22:14:00
Post #1





Grupa: Zarejestrowani
Postów: 159
Pomógł: 0
Dołączył: 21.08.2011

Ostrzeżenie: (0%)
-----


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.

Ten post edytował swiezak 11.01.2016, 22:20:49
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
qbson69
post 11.01.2016, 22:28:06
Post #2





Grupa: Zarejestrowani
Postów: 20
Pomógł: 7
Dołączył: 3.01.2016

Ostrzeżenie: (0%)
-----


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);


Ten post edytował qbson69 11.01.2016, 22:29:31
Go to the top of the page
+Quote Post
swiezak
post 11.01.2016, 22:37:49
Post #3





Grupa: Zarejestrowani
Postów: 159
Pomógł: 0
Dołączył: 21.08.2011

Ostrzeżenie: (0%)
-----


Dzieki serdeczne za pomoc po raz kolejny. Gratuluje wiedzy.
Go to the top of the page
+Quote Post
nospor
post 11.01.2016, 22:38:18
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
swiezak
post 11.01.2016, 22:44:03
Post #5





Grupa: Zarejestrowani
Postów: 159
Pomógł: 0
Dołączył: 21.08.2011

Ostrzeżenie: (0%)
-----


Nospor, bo ja jestem taki kombinator ;-) Dopiero poznaje tajniki frameworka, a manuala do konca nie przeczytalem.
Go to the top of the page
+Quote Post
nospor
post 11.01.2016, 22:46:38
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
swiezak
post 11.01.2016, 22:55:39
Post #7





Grupa: Zarejestrowani
Postów: 159
Pomógł: 0
Dołączył: 21.08.2011

Ostrzeżenie: (0%)
-----


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.

Ten post edytował swiezak 11.01.2016, 23:11:14
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 07:40