Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][Doctrine] Klonowanie obiektu i ponowny zapis do bazy - czy to bug?
Forum PHP.pl > Forum > PHP > Frameworki
adalgrim
Witam,

Mam problem z sklonowaniem obiektu A i ponownym zapisie go do tej samej tabeli jako nowy wiersz (w między czasie może być zmieniona pewna właściwość, ale większość jest taka jak u klona).

Robię tak:
  1. $B = clone $inst->getObjectA(); // w entity ObjectA mam nadpisaną metodę __clone w której id ustawiam na null
  2.  
  3. $em->detach($B);
  4. $em->persist($B);
  5. $em->flush();


próbowałem również bez detach... Błędu żadnego nie dostaję, ale obiekt nie jest kopiowany. Może to jakiś bug? sad.gif

Próbowałem również rozwiązania z http://stackoverflow.com/questions/9071094...w-in-doctrine-2
niestety zamieszczony tam unset wyrzuca błąd o próbie dostępu do atrybutów prywatnych (dość logiczne).

W związku z tym moje pytanie brzmi - jak poprawnie skopiować obiekt A do tej samej tabeli?

UPDATE

Nie mam pojęcia czy to coś z metodą __clone czy może bug w Symfony, ale z problemem można sobie poradzić pisząc metodę np. copyFrom w kopiowanej klasie, następnie utworzyć nową instancję tej klasy i wywołać metodę. Przykładowo:
  1. $newInstance = new Cars();
  2. $newInstance->copyFrom($original);
  3.  
  4. //dalej standardowo, czyli
  5. $em->persist($newInstance);
  6. $em->flush();

natomiast w samej metodzie copyFrom napisać ręczne kopiowanie wartości np.:
  1. $this->setName($original->getName());
  2. $this->setPrice($original->getPrice());
  3. itd...



Pytanie nadal aktualne, bo powinno się to samo dać zrobić przy pomocy klonowania, tylko dlaczego się nie da?
ano
Pokaże kod metody __clone. Zaimplementowałeś ją zgodnie z http://doctrine-orm.readthedocs.org/en/2.0...p-or-clone.html ?

...nadpisaną metodę __clone w której id ustawiam na null
nie ustawiaj id na null i zobacz czy wtedy zadziała. (ja nigdy tego nie robiłem przy, własny kod __clone przydawał się tylko gdy obiekt ma jakieśp powiązania 1:N)
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.