MultiSelect a tabulka m:n – Best practice?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Kregl
Člen | 52
+
0
-

Ahoj!

Narazil jsem na pravděpodobně obvyklý, ale pro mě nejasný problém.
Mám tabulku members a tabulku roles, mezi těmito tabulkami je vazba m:n. Tabulka roles_map slouží k jejich spojení, obsahuje sloupce member_id a role_id. Jak nejlépe vyřešit update do této tabulky?

Napadá mě velmi intuitivní řešení. Všechny záznamy pro uživatele x z tabulky roles_map smazat a nahradit je výstupem z multiselectu. Tohle řešení mi však nepřijde úplně košér.

Jak to řešíte vy?

Díky!

Oli
Člen | 1215
+
0
-

Pokud je to takhle jednoduchý, tak to tak tesim. 2 jednoduchý dotazy a je to.

Pokud takhle nemůžu, tak si predam id a zjistim jestli je v db nebo není.

Jak to řešit jinak nevim.

Šaman
Člen | 2668
+
0
-

Některé ORM to taky tak dělají. Problém pak nastává jen tehdy, když to není pravá spojovací tabulka (jen dva sloupce), ale má i ID a třeba nějaké další sloupce (typicky nějaké příznaky té vazby).

Máš-li jen dva sloupce, klidně to řeš jak navrhuješ.

David Kregl
Člen | 52
+
0
-

Šaman napsal(a):

Některé ORM to taky tak dělají. Problém pak nastává jen tehdy, když to není pravá spojovací tabulka (jen dva sloupce), ale má i ID a třeba nějaké další sloupce (typicky nějaké příznaky té vazby).

Máš-li jen dva sloupce, klidně to řeš jak navrhuješ.

Mám v té tabulce i sloupec id – AI, INT(11). Jaké je nejlepší řešení v takovém případě? Díky

Šaman
Člen | 2668
+
0
-

Já používám LeanMapper. To id by nemělo vadit, jen ti to bude zbytečně generovat další a další.

V LM, když jsem přidal id a sloupec s příznakem, tak jsem si už na to vytvořil entitu a pak kontroloval, jestli už v databázi existuje, nebo ne. Je to sice víc dotazů, ale ten update se neprovádí často, takže by to nemělo vadit. V NDb by to mělo jít stejně, jen nepracuješ s entitou ale Row.