Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][symfony2] zapis dwóch obiektów a wyciąganie id pierwszego
Forum PHP.pl > Forum > PHP > Frameworki
adalgrim
Witam,

Mam mały problem z zapisem dwóch obiektów przy założeniu, że obiekt2 ma korzystać z id właśnie dodanego obiektu1. Mam tak:

  1. $entity = new Klasa1();
  2. ..
  3. bindowanie
  4. ...
  5. walidacja
  6. ....
  7. $em = $this->getDoctrine()->getEntityManager();
  8. $em->persist($entity);
  9.  
  10. $inst = new Klasa2();
  11. $inst->setIdAddressContactInfo($entity->getId());
  12. $em->persist($inst);
  13.  
  14. $em->flush();


Teraz tak. Jak zrobię em->flush() przed deklaracją Klasy2 (oraz zakomentuje linie z $inst) to obiekt zapisuje poprawnie i redirectuje mnie na stronę, która w adresie ma $entity->getId()

Moje pytanie brzmi jak wyciągnąc to id przed flushem (próbowałem dwa flushe, również nei działa), żeby Klasa2 miała zapisany w sobie id Klasy1. Błąd dostaję z MySQLa, że wartośc id Klasy 2 nie może być null (takie mam wymaganie, dlatego chciałem ręcznie przypisać to id przed zapisem)

Z góry dzięki!

-- UPDATE, rozwiązanie częściowe --

Zamiast zapisywać samo id od klasy1, można do klasy2 przekazać cały obiekt klasy1 (trzeba odpowiednie pola dodać oczywiście do Entity) - ALE! - jest to tylko częściowe rozwiązanie i niejako pisanie/przekazywanie podwójne, bo samo skoro generator entity tworzy nam setery/getery, to teoretycznie powinno się dać dodać obiekt niezależnie od innego obiektu wyłącznie z ustawianiem odpowiednich setów.

Jeżeli znacie lepsze rozwiązanie - podzielcie się smile.gif
Crozin
Cytat
Zamiast zapisywać samo id od klasy1, można do klasy2 przekazać cały obiekt klasy1 [...]
To jest jedyne poprawne rozwiązanie. Jeżeli generator wygenerował Ci powyższy kod, musiałeś źle bazę zaprojektować - być może zapomniałeś dodać kluczy obcych?

1. Obiekt klasy Klasa1 powinien mieć zdefiniowaną relację jeden-do-wielu, bądź jeden-do-jeden z obiektem klasy Klasa2.
2. W relacji ustaw by obiekty relacji również były zapisywane w bazie danych (cascade = {'persist'}) - http://docs.doctrine-project.org/projects/...cade-operations
adalgrim
Baza jest okej, klucze na pewno też, kod nie był generowany automatycznie. Chodziło mi tylko o problem zapisu - dość logiczne wydawało się, że wystarczy samo ID skoro tylko ID mnie interesowało. Jeśli jednak zawsze trzeba zapisywać cały obiekt - to ok, przyjmuję do wiadomości.

Tak czy owak dzięki za rozwiązanie wątpliwości!

Temat do zamknięcia.
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.