我希望通过限制已连接实体的数量来减少数据库的负载量。
作为一个例子,假设我有一个与实体有多对一关系的Category实体。然后在摘要页面上,我只想显示每个类别的前5个产品。我将如何编写DQL?
我显然可以打电话给$category->getProducts()
,只显示前五个,但这感觉很浪费。我不确定Symfony2 / Doctrine是否在后台做了一些改进以改进,但仍然觉得应该有更好的方法来限制连接实体的数量。我也尝试使用->setMaxResults()
,但这对我没用。
答案 0 :(得分:0)
使用Doctrine,您可以使用EntityRepository,您可以在其中编写自己的改进查询,而不是简单地调用$category->getProducts()
。
对于DQL,请执行类似
的操作$em = $this->getDoctrine()->getManager();
$query = $em->createQuery('
SELECT p
FROM AcmeStoreBundle:Product p
JOIN AcmeStoreBundle:Category c
WHERE p.price > :price
ORDER BY p.price ASC
')->setParameter('price', '19.99');
$products = $query->getResult();