使用Doctrine的DQL限制连接的实体

时间:2014-02-05 13:42:32

标签: php symfony doctrine one-to-many dql

我希望通过限制已连接实体的数量来减少数据库的负载量。

作为一个例子,假设我有一个与实体有多对一关系的Category实体。然后在摘要页面上,我只想显示每个类别的前5个产品。我将如何编写DQL?

我显然可以打电话给$category->getProducts(),只显示前五个,但这感觉很浪费。我不确定Symfony2 / Doctrine是否在后台做了一些改进以改进,但仍然觉得应该有更好的方法来限制连接实体的数量。我也尝试使用->setMaxResults(),但这对我没用。

1 个答案:

答案 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();