Autor | Zpráva | ||
---|---|---|---|
Jirin Profil |
#1 · Zasláno: 2. 11. 2013, 16:28:33
Zdravím,
mám entitu, u každé entity může být hodnocení. Ty hodnocení ukládám do další entity. 1:N vazba. A ted potřebuji nějak získat průměrnou hodnotu hodnocení. Jak ot nejlépe řešit, mě napadlo pouze napsat si DQL, a tam vybrat entitu + avg('r.rating') - jenže, chtěl bych pracovat pak s entitou jako celkem, abych si prostě sáhl na $entita->getRating() a dostal ten průměr. Když to proženu přes DQL tak dostanu oddělenou entitu a oddělený výsledek. Jak se tohle ideálně řeší? Mě napadli dvě řešení: 1. u první entity si udělat atribut (v dtb tedy další sloupec), který v sobě bude držet aktuální hodnocení 2. udělat si pomocný atribut, který nebude v dtb a po zavolání dql mu nastavím to správné hodnocení. nicméně tam to může způsobovat celkem nekonzistentnosti. Jak by se to mělo správně řwšit? |
||
Lkopo Profil * |
#2 · Zasláno: 2. 11. 2013, 17:02:33
Môžete poslať prosím zdrojové kódy tých entít, kde uvidíme daný vzťah a čo ste zatiaľ vymysleli?
|
||
Jirin Profil |
#3 · Zasláno: 2. 11. 2013, 18:25:30
Ta halvní entita:
/** * @ORM\Entity */ Class Game{ ... /** * @ORM\OneToMany(targetEntity = "Rating", mappedBy = "game", cascade = {"persist", "remove"}, fetch = "EXTRA_LAZY") */ protected $ratings;¨ ... } a tady je pak entita Rating osekaná: /** * @ORM\Entity * @ORM\Table(name = "game_rating") */ class Rating { ... /** * @ORM\ManyToOne(targetEntity = "Game", inversedBy = "ratings") */ protected $game; ... } No a co jsem vymyslel, tak jsem nevymslel nic světoborného jak jsem popsal výše, tady je to DQL: $qb = $this->gameDao->createQueryBuilder(); $qb->select('g', 'avg(r.rating)') ->from('Game', 'g') ->join('Rating', 'r') ->where('g.slug = :slug') ->setParameter('slug', $slug); $game = $qb->getQuery()->getSingleResult(); což mi vrátí pole o pod indexem 0 je entita Game a druhy je hodnota toho avg() |
||
Časová prodleva: 11 let
|
0