V necem zasadnim chapu model Entity-Mapper, dochazi k zacykleni na urovni mapperu, prosim o nakopnuti

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

? jak resite nasledujici problem se zacyklenim v modelu Entity<->Mapper ?

. Mam entity Spisovatel a Kniha

. Dale mam mappery SpisovatelMapper a KnihaMapper

. pokud zavolam Spisovatel1 = SpisovatelMapperInstance->najdi(1)

  • dostanu entitu Spisovatele, nalezeneho v databazi podle id

. pokud nasledne zavolam Spisovatel1->vratKnihy

  • je uvnitr eneity zavolana metoda ktera overi zda uvnitr entity je v privatni metode ulozen mapperKnih a pokud ano, vrati de fakto vysledek KnihyMapper->najdiPodleSpisovatele($this->vratId()) coz vrati jako kolekci entit Kniha
  • to se zda v poradku, problem je s konstruktory v mapperech, ty pochopitelne dostavaji databazove pripojeni a hned si v ramci privatnich vlastnosti zalozi v sobe sama i dalsi mappery se kterymi bude nutne predavat do entit, aby vyse uvedene fungovalo, a tady se i pochopitelne aplikace zacykli, protoze SpisovatelMapper v konstruktoru zaklada KnihaMapper a pri jeho zakladani se vola zas jeho konstruktor ktery si do privatnich vlastnosti zaklada naopak SpisovatelMapper, … a tak stale dokola. To neni uplne dobre reseni zda se. Pritom je zrejme nutne aby mappery drzely sve instance navzajem, kdyz tak mne opravte, pokud chci mit k dispozici metody SpisovatelMapperInstance->vratSpisovateleKnihy($kniha) a soucasne KnihaMapperInstance->vratKnihySpisovatele($spisovatel)
  • neco je zrejme v me uvaze velmi spatne, prosim o nakopnuti, nejspis Entity Mapper model v necem zasdnim chapu spatne
zac24
Člen | 41
+
0
-

zrejme je resenim nezakladat tyto pomocne mappery pro predavani do entit v konstruktoru mapperu ale az v metodach najdiXYZPodleABC… ktere vraci prislusne entity a jejich kolekce. Uvazuji spravne? Nebo je to jen zaplatovani spatneho pristupu k veci?

Filip Procházka
Moderator | 4668
+
+10
-

Nebylo by lepší nepsat vlastní ORM, ale použít nějaké existující?

  • Doctrine s kdyby/doctrine (moje osobní preference)
  • nextras/orm (novinka od @hrach)
  • Tharos/LeanMapper (jednu dobu hrozně populární, ale poslední dobou je ticho a sám autor používá převážně Doctrine)

Prakticky cokoliv z toho je lepší než znovu vynalézat kolo :)