Załózmy, że mam tablicę KARTOTEKA o strukturze np.:
id, created, modified, numer, imię, nazwisko, .... (do 30 pól)
Muszę przygotowywać roczne archiwa tej tablicy (o nazwach [rok]_KARTOTEKA) przenosząc część
rekordów z tablicy podstawowej. Chcę to zrobić następująco:
1) sprawdzić czy tablica archiwum istnieje (np. 2015_KARTOTEKA)
2) jeśli nie istnieje to ja założyć
3) skopiować rekord z tablicy KARTOTEKA do tablicy archiwum (np. 2015_KARTOTEKA)
4) usunąć ten rekord z tablicy KARTOTEKA
Ale chciałbym to zrobić nie powielając Entity tablicy KARTOTEKA. Chciałbym użyć
tej samej klasy.
Pierwszy krok zrobiłem tak:
Kod
$manager = $this->getDoctrine()->getManager();
$metadata = $manager->getClassMetadata(KARTOTEKA::class);
$metadata->setPrimaryTable(array('name' => ‘2015_KARTOTEKA’));
$schema = new SchemaTool($manager);
$schema->createSchema(array($metadata));
$metadata = $manager->getClassMetadata(KARTOTEKA::class);
$metadata->setPrimaryTable(array('name' => ‘2015_KARTOTEKA’));
$schema = new SchemaTool($manager);
$schema->createSchema(array($metadata));
i archiwum jest towrzony gdy takiej tablicy nie ma w bazie danych - fajnie.
Problem mam z krokami 3 i 4 bo nie potrafię znaleźć poprawnej drogi
rozwiązania tego zadania. Próbowałem tak:
Kod
$data = $this->getRepo('KARTOTEKA')->findOneBy(1);
$second = clone $data;
$second->setId(null);
$second->save();
$second = clone $data;
$second->setId(null);
$second->save();
oraz tak:
Kod
$second = new Second();
$second->fromArray($data->toArray());
$second->save();
$second->fromArray($data->toArray());
$second->save();
I ciągle nie wiem gdzie i jak znaleźć "uchwyt" do obiektu archiwum (np. 2015_KARTOTEKA).
I żebym nie był źle zrozumiany, jak zrobić to otwartym kodem SQLa (DQL) to ja wiem.
Ja chcę to zrobić jak najbardziej Doctri-nersko.
Proszę o pomoc i sugestie.