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í.