Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony2][Doctrine]Chyba problemik, ale dla mnie PROBLEM
Forum PHP.pl > Forum > PHP > Frameworki
Kazio44
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.

Crozin
Podstawowe pytanie. Dlaczego chcesz w ogóle to dzielić na różne tabele? Dlaczego nie możesz po prostu przy zapytaniach dodać:
  1. WHERE YEAR(created) = 2015
A jeżeli już potrzebujesz tego z jakiś względów wydajnościowych skorzystaj z normalnego partycjonowania na poziomie bazy danych.
Kazio44
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ń.
Crozin
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.