Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony][Symfony2] Kopiowanie nodów wraz z potomkami, Tree behavior extension dla Doctrine 2
korniks
post 25.05.2012, 20:39:09
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 22.03.2012

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


Witam,

w swoim projekcie wykorzystuje Tree behavior extension dla Doctrine 2. Chciałem móc kopiować i wycinać poszczególne nody do nowego miejsce w drzewie. Zrobienie "wycinania" noda do innego miejsca było dość łatwe, wystarczyło bowiem zmienić wartość atrybutu parent w obiekcie. Niestety z kopiowaniem mam już problemy.

Próbowałem z klonować obiekt, a następnie go dodać do bazy:

  1. $node_clone = clone $node;
  2. $node_clone->setParent($newParent);
  3.  
  4. $em->persist($node_clone);
  5. $em->flush();


Niestety, tak jak przypuszczałem skopiował samego noda bez dzieci i relacji. Z tego co wyczytałem brak relacji można załatwić po przez napisanie funkcji magicznej __clone(). Jednak co z dziećmi?

Istnieje jakiś szybki i wydajny sposób na przekopiowanie noda wraz z dziećmi i wszystkimi relacjami bez konieczności wyciągania "ręcznie" dzięci z każdego zagnierzdźenia?

Pozdrawiam.

Ten post edytował korniks 26.05.2012, 12:22:36
Go to the top of the page
+Quote Post
murwazy
post 26.05.2012, 11:55:48
Post #2





Grupa: Zarejestrowani
Postów: 53
Pomógł: 5
Dołączył: 13.04.2007
Skąd: Szczecin

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


uzyj api rozszerzenia doktryny, na pewno sa tam metody w rodzaju
->persistAsFirstChild()
->persistAsFirstChildOf()
Go to the top of the page
+Quote Post
korniks
post 26.05.2012, 14:58:26
Post #3





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 22.03.2012

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


Cytat(murwazy)
uzyj api rozszerzenia doktryny, na pewno sa tam metody w rodzaju


Tak są, niestety nie kopiują mi noda i dzieci a jedynie przenoszą je na nowe miejsce ;/. Przejżałem też całe NestedTreeRepository i nie znalazłem tego czego szukam.

Potrzebuje czegoś co działa podobnie do funkcji copy($deep) która była w doctrine 1.
Go to the top of the page
+Quote Post
ano
post 26.05.2012, 16:39:42
Post #4





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

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


A czemu nie napiszesz metody __clone() dla tego obiektu?
Masz tutaj poradnik jak to zrobić:
http://docs.doctrine-project.org/projects/...p-or-clone.html

A jak chcesz konkretny kod to musisz dać kod swojej klasy.


--------------------
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: 19.06.2025 - 02:57