Mam następujące zapytanie:Jak mogę ograniczyć powiązaną encję wynik w Doctrine2?
$query = $this->getEntityManager()->createQuery('
SELECT u, p, m
FROM MyCoreBundle:User u
JOIN u.programmes p
JOIN u.motivation m
');
$result = $query->getResult();
chcę ograniczać motywację obiektów zwracanych przez każdego użytkownika za wynik tego drugiego zapytania, które używam w innym miejscu (w repozytorium motywacyjny):
$query = $this->getEntityManager()->createQuery('
SELECT m FROM MyCoreBundle:Motivation m
WHERE m.user = :user
ORDER BY m.date DESC');
$query->setParameter('user',$user);
$query->setFirstResult(0);
$query->setMaxResults(1);
//@TODO if there is not result recorded for the user, return sth which indicates this
return $query->getResult();
Czy istnieje sposób na ograniczenie i ograniczenie motywacji w pierwszym zapytaniu lub lepszym podejściu?
Zważywszy napisane poniżej i przy założeniu, że „ostatni motiviation” ma zasadnicze znaczenie dla ciebie i to będzie często dostępne, możliwe rozwiązanie to utworzenie relacji o nazwie "User: LatestMotivation" OneToOne. A następnie za każdym razem, gdy dodawana jest nowa jednostka "Motywacja", (poprzez zdarzenia Doctrine 'prePersist') aktualizuj' LatestMotivation' z nowo dodanym. W ten sposób będziesz mógł przeglądać wiele rekordów 'User', pobierając najnowsze motywacje. HTH –