Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony][Doctrine] Klonowanie obiektu i ponowny zapis do bazy - czy to bug?
adalgrim
post 28.06.2012, 18:29:00
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 8.11.2005
Skąd: Zabrze

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


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?

Ten post edytował adalgrim 28.06.2012, 21:04:48
Go to the top of the page
+Quote Post

Posty w temacie


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: 6.07.2025 - 19:36