Wpis z mikrobloga

Treść przeznaczona dla osób powyżej 18 roku życia...
  • 26
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Nie do końca rozumiem. Edytujesz inne entity i leci insert? Miałeś chyba na myśli update. Niemniej jeżeli chodzi o dodawanie to wywołaj persist tylko na tych obiektach, ktore ostatecznie maja trafic do bazy danych. Jeżeli z jakichs powodów nie możesz tego zagwarantować, to użyj detach na obiekcie który jednak nie ma być dodany, powinno pomoc.
  • Odpowiedz
@Jurigag: Zobacz sobie merge. Jeśli obiekt jest w bazie to doctrine powinien go zaselectować i zaindeksować sobie, że ten obiekt już istnieje w bazie i nie należy go wrzucać. To jest najbardziej eleganckie, ale mało wydajne. Jak chcesz to ominąć i samemu zadbać o nie dublowanie danych to zmień cascade, żeby bez wyraźnego persista doctrine nie zapisywał.
  • Odpowiedz
@Jurigag: Nie wiem czy dobrze rozumiem pytanie, ale wg mnie po znalezieniu w bazie pasujacego klienta robisz zamowienie->setClient($znaleziony); wtedy powinno sie zapisac dobrze pod warunkiem ze zrobisz flush($zamowienie) a nie flush(). Samo flush zapisze wszystko lacznie z nowym klientem pochodzacym z formularza.
Co do wrzucania nowego z formularza to dziala to tak jak powinno.
  • Odpowiedz
@gajowy_marucha: tak robie i dodaje ten z formularza jako nowy rekord xD przecież napisałem wyżej jak się zachowuje, jak jest detach to dodaje ten z formularza, jak nie ma to aktualizuje ten początkowy co był xD
  • Odpowiedz
@Jurigag: a ma on jakąś relację do innej encji? bo może podłączasz do owning side jakiejś i ją zapisujesz - wtedy prawdopodobnie pojdzie kaskada, a potem persystujesz znowu i zapisujesz kolejnny raz - tworzy jako nową encje w bazie.
  • Odpowiedz
@uirapuru: no tak pisałem, jest zamówienie które ma przypisanego klienta, także jest relacja i są jakieś te kaskady, tylko że to jest zapisywane dwa razy podczas czegoś takiego kuźwa:

$xyz = new FinalCarUser();
$xyz->import($finalCarUser);
$em->persist($xyz);
$em->flush($xyz);
  • Odpowiedz