![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 3.09.2015 Ostrzeżenie: (0%) ![]() ![]() |
Sorry Panowie że zawracam głowę ale jestem za "mały" żeby temu dac radę tak jak chcę.
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)); 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(); oraz tak: Kod $second = new Second(); $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. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Podstawowe pytanie. Dlaczego chcesz w ogóle to dzielić na różne tabele? Dlaczego nie możesz po prostu przy zapytaniach dodać:
A jeżeli już potrzebujesz tego z jakiś względów wydajnościowych skorzystaj z normalnego partycjonowania na poziomie bazy danych. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 3.09.2015 Ostrzeżenie: (0%) ![]() ![]() |
Dzięuję za odpowiedź.
Muszę to dzielić, bo to jest założenie systemu - "roczne archiwa podstawowych tablic". Taki wymóg i kropka, choć tablica nie jest duża, zatem najprościej byłoby jej nie dzielić. Korzystam MySQL a tablice są niewielkie, więc partycjonowanie to jak "armata na muchę". A, przecież mój problem jest banalny: odczytaj, zapisz i usuń. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Tabele, nie tablice. ;-)
2. To jest założenie biznesowe/produktowe czy technologicznie? Bo te ostatnie mają to do siebie, że jak są "głupie" to się ich nie stosuje. Zaś te pierwsze są kompletnie niezależne od wybieranych technologii i konkretnych rozwiązań. 3. Od biedy skoro ktoś chce takie założenie... utwórz mu n widoków dla każdego roku, ale niech sam system działa normalnie. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 19:23 |