Komunikace mezi dvěma modely

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

Zdravím,

řekl bych, že mám asi špatný návrh.

Mám třídy CategoryRepository a ProductRepository. Ve třídě CategoryRepository chci implementovat metodu remove($id), která danou kategorii odstraní. Před samotným odstraněním bych však rád zkontroloval, zda se v dané kategorii nenachází nějaký produkt. Takže bych potřeboval volat něco jako ProductRepository->countInCategory($id).

Jak se toto řeší?

romiix.org
Člen | 343
+
0
-

Riešil by som to cez cudzie kľúče priamo v DB.

Ak chceš, aby sa automaticky odstránili aj produkty, nastav si cudzí kľúč z product na tabuľku category na ON DELETE CASCADE.

Ak chceš odstráneniu kategórie v prípade ak nie je prázdna zabrániť, použi cudzí kľúč ON DELETE RESTRICT. Databáza ti takéto zmazanie nepovolí a vyhodí sa výnimka s ktorou môžeš následne pracovať.

Jendaaa
Člen | 21
+
0
-

Nejlíp to vyřešíš tak, že si uděláš nějakou další třídu o úroveň výš, třeba CategoryService, která bude v závislostech přijímat CategoryRepository i ProductRepository. V metodě removeCategory si potom z obou repozitářů získáš data co potřebuješ a provedeš operace.