Doctrine 2 ORM – draft několika souvisejících entit

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

Ahoj,

řeším následující problém – mám několik entit, které spolu mají různé asociace. V databázi je to několik spolu souvisejících tabulek. K těmto záznamům budou přistupovat dva druhy uživatelů – úplný správce a speciální uživatel.

Potřebuji, aby správce mohl upravovat přímo konkrétní záznamy v DB. To je jednoduché. Problém ale je, že potřebuji, aby speciální uživatel dělal úpravy v těchto záznamech někde vedle, aby se změny neprojevily na frontendu. Tyto změny bude muset schválit správce.

Jak byste podobný problém řešili vy? Mě napadlo, mít oddělenou strukturu těch souvisejících tabulek a při zahájení editace by se všechna data, která s tím jedním hlavním záznamem souvisí, překopírovala do nějakých „draft“ tabulek a spec. uživatel by pak dělal úpravy na těchto datech. Jenže mi přijde hloupé dělat několik duplicitních entit, které by pracovaly s tou draft tabulkou.

Jako další řešení mě napadlo udělat nějakou souborovou cache, která by se invalidovala při schválení změn – úpravy by tak probíhaly na „produkčních“ záznamech.

Předem díky za jakékoliv nápady.

cubic
Člen | 45
+
0
-

Nevím, jestli je to nejlepší způsob, ale je univerzální a poměrně jednoduchý. Vytvořil bych si tabulku, kde by byla nějaká fronta úprav. Co chci změnit, v jaké tabulce a který sloupec + timestamp. Admin to pak projde a buď schválí (uloží se změny) a nebo zruší.

greeny
Člen | 405
+
0
-

Určitě bych nepoužíval žádnou cache, co když omylem promažeš cache? Tím zničíš i chystané změny. Šel bych cestou jako říká @cubic :)

dibalaj
Člen | 40
+
0
-

Díky za odpovědi. Nejde ale o jednoduché úpravy typu „přepsání několika sloupců“, ale spíše o komplexní úpravy – mazání/přidávání souvisejících záznamů, nahrávání obrázků k souvisejícím záznamům, apod. Nenapadá mě pak způsob, jak to v backendu pěkně zobrazit, aby spec. uživatel i admin viděli „draft“ stejně jako produkční záznam.

Pro jistotu uvedu reálný příklad:

  • existují záznamy „obchodů“
  • na tyto obchody jsou navázané produkty, které obchod nabízí
  • každý produkt má svoji kategorii a nějaké tagy
  • každý produkt má nějakou fotku

Potřebuji tedy, aby admin upravoval přímo „produkční“ záznamy – tedy aby se změny projevily ihned. Speciální uživatel bude vlastně majitel obchodu, který bude mít do administrace také přístup – ale jen omezený – tedy uvidí jen správu svého obchodu. Bude moct přidávat/mazat produkty svého obchodu, upravovat údaje obchodu (jako třeba otevírací dobu), přidávat nové kategorie produktů a přidávat nové tagy. Admin by poté v administraci konkrétního obchodu měl vidět něco jako „existují úpravy od majitele obchodu“ a po rozkliknutí by měl vidět „novou verzi“ obchodu, kterou pak schválí/zamítne.

Nevím, jestli by se dal způsob, co jste doporučili, rozumně a snadno použít. Nenapadá vás pro tento konkrétní příklad ještě jiné řešení? :-)

cubic
Člen | 45
+
0
-

V tom, co píšeš, nevidím problém, ani v mazání a přidávání. Obrázky si uložíš pod unikátním názvem na disk a je jen na tobě, kdy je uložíš do hlavní tabulky a začneš je zobrazovat zákazníkům.
Ještě ty změny můžeš slučovat do nějakých logických celků (= např. řádek v cílové tabulce), aby to bylo přehlednější při schvalování. A nebo si vytvořit pro každou tabulku zvláštní frontu, ale to mi přijde zbytečně komplikované.

Editoval cubic (15. 11. 2015 20:49)