Doctrine: jak v entitě zavolat DQL?

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

Zdravím,

mám entitu team:


   class Team extends \Kdyby\Doctrine\Entities\BaseEntity

V této entitě bych chtěl vypisovat statitiky týmu (celkový počet odehraných zápasů, počet vyhraných zápasů, prohraných, remíz…). K tomu budu pořebovat DQL dotaz. K DQL ale budu potrebovat entity managet. Jak udělat v entitě DQL dotaz?

   public function getMatches() {
      $query = $em->createQuery('SELECT ...');
      $users = $query->getResult();
   }
enumag
Člen | 2118
+
+3
-

Takhle entity pokud vím nefungují. Ten DQL dotaz poskládej jinde (v presenteru / modelové třídě nebo imho nejlépe pomocí QueryObjectu) a výsledek předej kam ho potřebuješ.

Technicky je sice možné EntityManager do entity dostat přes eventy, ale je to ošklivé.

Azathoth
Člen | 495
+
+2
-

entita může poměrně účinně operovat se svými daty (entitami, na kreré má asociaci) pomocí Criteria objektů. Na kolekci můžeš zavolat metodu matching, které pošleš nějaká Criteria. tam můžeš použít where, orderby, apod…
http://doctrine-orm.readthedocs.org/…iations.html#…
ale někdy je dotaz moc složitý a musíš to udělat v service.
na jednom projektu si posílám entitymanager do entity přes event, aby mohla entita dělat složité dotazy, ale to je jen kvůli tomu, že zrovna v tom usecasu by používání setvice vypadalo naprosto otřesně a ten kód by byl mnohem hůř čitelný.

Editoval Azathoth (12. 7. 2015 1:21)