Jak v Nette\Database vyřešit SLOŽITĚJŠÍ pojetí vazby M:N?

- _Martin_
- Generous Backer | 679
Ve velmi nastavitelné aplikaci používáme systém uživatelsky definovaných číselníků. Namísto definování mnoha tabulek pro jednotlivé entity (číselníky využívá kde co) existuje tabulka jedna.
Mnoho tabulek
Osoby (person)
| id | name |
|---|---|
| 1 | Aleš |
| 2 | Petra |
Položky číselníku (dial_item)
| id | dial_id | name |
|---|---|---|
| 1 | 1 | Muž |
| 2 | 1 | Žena |
Vazební tabulka (person_dial_item)
| dial_item_id | person_id |
|---|---|
| 1 | 1 |
| 2 | 2 |
Tabulek typu person_dial_item bych musel mít spoustu pro
každou entitu.
Zkusil jsem ji tedy nahradit následujícím:
Jedna tabulka
Vazební tabulka (entity_dial_item)
| dial_item_id | entity_id | entity_name |
|---|---|---|
| 1 | 1 | person |
| 2 | 2 | person |
V tuto chvíli mám ale problém s výběrem pomocí
->related. Potřeboval bych nastavit jiné jméno sloupečku
(entity_id namísto person_id) a přidat podmínku pro
sloupeček entity_name. Existuje vestavěná podpora jak toto
řešit, případně mohla by podobná funkcionalita přibýt? Zatím to
řeším úpravou Nettích tříd (Nette\Database\Table\ActiveRow a
Nette\Database\Table\Selection), ale rád bych se vlastním
úpravám FW vyhnul a také bych radši čistější řešení.

- _Martin_
- Generous Backer | 679
@paranoiq: Existuje mnoho číselníků a některé jsou využívány více entitami. Např. číselník měna (s položkami CZK, EUR,…) je využíván entitou zákazníka (pro určení preferované měny) a entitou bankovního účtu (pro určení měny, ve které je účet veden). V současné verzi systému je přes 20 číselníků, což znamená více jak 20 vazebních tabulek (více, než kolik číselníků existuje, neboť každý číselník je využíván nejméně jednou entitou).
@vrana: Nevadilo by potom v tom prvním případě, že (například) při uživatelem vytvářeném číselníku by musela vzniknout nová tabulka? Neumím se rozhodnout, co je v tomhle případě menší zlo. Integrita mě možná tolik netíží, používám DB spíš jako skladiště dat.
Do API NotORM jsem se díval, ale z uvedených příkladů jsem to nevyčetl. Mohl bys mi napsat příklad takového použití? Tyto specifické relace je potřeba pouze pro číselníky, na všechny ostatní vazby funguje velmi dobře výchozí nastavení.