Tôi có truy vấn sau đây:Làm cách nào để giới hạn kết quả thực thể được liên kết trong Doctrine2?
$query = $this->getEntityManager()->createQuery('
SELECT u, p, m
FROM MyCoreBundle:User u
JOIN u.programmes p
JOIN u.motivation m
');
$result = $query->getResult();
Tôi muốn hạn chế động lực đối tượng được trả về cho mỗi người dùng là kết quả của truy vấn này thứ hai mà tôi đang sử dụng ở nơi khác (Trên kho Động lực):
$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();
Có cách nào để giới hạn và hạn chế động lực trong truy vấn đầu tiên hoặc cách tiếp cận tốt hơn không?
Xét viết dưới đây, và giả định rằng "motiviation mới nhất" là quan trọng hàng đầu cho bạn và nó sẽ được truy cập rất nhiều, giải pháp có thể là để tạo ra 'User: LatestMotivation' OneToOne relatinship. Và sau đó mỗi khi một thực thể 'Motivation' mới được thêm vào, (thông qua các sự kiện trước của Doctrine' prePersist') cập nhật 'LatestMotivation' với một mới được thêm vào. Bằng cách này, bạn sẽ có thể lặp qua nhiều bản ghi 'Người dùng' tìm nạp động lực mới nhất. HTH –