Как я могу ограничить связанный результат сущности в Doctrine2? - PullRequest
8 голосов
/ 01 сентября 2011

У меня следующий запрос:

$query = $this->getEntityManager()->createQuery('
                      SELECT u, p, m
                      FROM MyCoreBundle:User u
                      JOIN u.programmes p
                      JOIN u.motivation m
                      ');

$result = $query->getResult();

Я хочу ограничить объекты мотивации, возвращаемые для каждого пользователя, как результат этого второго запроса, который я использую в другом месте (в репозитории мотивации):

$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();

Есть ли способ ограничения и ограничения мотивации в первом запросе или лучший подход?

1 Ответ

14 голосов
/ 01 сентября 2011

Вы не можете ограничить количество объединенных рядов.

Если у вас есть Doctrine 2.1, вы можете использовать ->slice() в коллекции:

$collection = $user->getMotivations();    // returns a LazyCollection, 
                                          // makes no SQL query

$motivations = $collection->slice(0, 20); // queries the first 20 motivations 
                                          // for this user (if the association
                                          // was not fetch-joint)

См. http://www.doctrine -project.org / документы / ОРМ / 2,0 / о / учебники / экстра-ленивого-associations.html

...