Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony2][Doctrine]Chyba problemik, ale dla mnie PROBLEM, Doctrine i mała procedura
Kazio44
post
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.

Go to the top of the page
+Quote Post
Crozin
post
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ć:
  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.
Go to the top of the page
+Quote Post
Kazio44
post
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ń.
Go to the top of the page
+Quote Post
Crozin
post
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.
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 Aktualny czas: 19.08.2025 - 19:23