Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][Doctrine]Entities i ich statusy
Forum PHP.pl > Forum > PHP > Frameworki
Virti
Witam,

z racji, że większość entities w projekcie będzie miała swoje statusy (np. deleted, verified, expired itd.) oraz z uwagi na fakt, że będę potrzebował historię zmian tych statusów wymyśliłem następujące rozwiązanie:

Entity Status:
  1. <?php
  2. class Status
  3. {
  4. protected $id;
  5. protected $type = null; // np. deleted, hidden, highlighted
  6. protected $value = true; // true|false
  7. protected $change_reason = null; // uzasadnienie dlaczego status został zmieniony (dotyczy np. locked itd.)
  8. protected $changed_by // osoba, która dokonała zmiany;
  9. protected $changed_at // datetime zmiany;
  10. }


dla przejrzystości usunąłem adnotacje.

Myk polega na tym, że mam entity np. Account. Pomiędzy tymi dwoma obiektami tworzę relację many to many (nie chcę w tabeli status dawać np. account_id ponieważ Status będzie podpinany do jeszcze wielu innych obiektów). Z każdej "statusowalnej" klasy wyprowadzam zatem powiązanie do Status poprzez tabelę pośredniczącą.

Moje pytania są następujące:
1. Czy taka struktura według osób bardziej niż ja doświadczonych (zaczynam z Sf2 dopiero) jest poprawna i ma ręce i nogi?
2. W jaki prosty sposób mogę pobrać te statusy wraz z obiektem? Interesują mnie oczywiście najnowsze z danego typu. W czystym SQL pobranie aktualnych statusów wyszło mi w nast. sposób:
  1. SELECT * FROM (
  2. SELECT t.type, t.value
  3. FROM vtb_status AS t
  4. ORDER BY t.changed_at DESC
  5. ) AS t1 GROUP BY t1.type


Z góry dziękuję za wszelkie dobre rady i pomoc,
Pozdrawiam
Gribo
wg mnie tabala ze statusami jesli chcesz zrobić many to many powinna zawierać jedynie pola id, type.
Tabela łacząca Account ze Statusem powinna zawierac pola change reason, change_by, change_at

Powód jest prosty jeśli dodasz te pola do status i zmienisz np. reason jakiemus statusowni to wszytskie account z tym statusem będą miały ten sam change_reason.
W symfony możesz połączyć te tabele i pobierac poprzez getStatus. Poczytaj na stronach doctrine o relacji many-to-many
Virti
Założenie jest takie, że jeden status jest przypisany tylko do jednego konta (pole status_id w tabeli łączącej ma być unique), tak aby jeden status mógł być wykorzystany tylko raz. Poza tym powód zmiany statusu musi być częścią historii - zatem dobrze by było, gdyby był trzymany razem ze statusem - tak mi się wydaje.

Jakiś pomysł jak mogę połączyć pobieranie Account z zapytaniem SQL wyżej? Zależałoby mi, żebym mógł wyświetlić listę kont z ich statusami zachowując jednocześnie pewną (na tym etapie chociaż szczątkową) optymalizację.

Pozdrawiam i dzięki za odpowiedź! wink.gif
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.