Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [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
ano
post 1.07.2012, 17:57:16
Post #2





Grupa: Zarejestrowani
Postów: 435
Pomógł: 40
Dołączył: 16.02.2003
Skąd: Wrocław

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


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)

Ten post edytował ano 1.07.2012, 17:58:15


--------------------
Linkedin | ...
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: 22.06.2025 - 16:00