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:
<?php class Status { protected $id; protected $type = null; // np. deleted, hidden, highlighted protected $value = true; // true|false protected $change_reason = null; // uzasadnienie dlaczego status został zmieniony (dotyczy np. locked itd.) protected $changed_by // osoba, która dokonała zmiany; protected $changed_at // datetime zmiany; }
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:
SELECT * FROM ( SELECT t.type, t.value FROM vtb_status AS t ORDER BY t.changed_at DESC ) AS t1 GROUP BY t1.type
Z góry dziękuję za wszelkie dobre rady i pomoc,
Pozdrawiam