【问题标题】:Limiting joined entities with Doctrine's DQL使用 Doctrine 的 DQL 限制连接的实体
【发布时间】:2014-02-05 13:42:32
【问题描述】:

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

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

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

【问题讨论】:

  • 您可以限制结果行,而不仅仅是加入。如果你想限制加入,你必须使用子查询

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


【解决方案1】:

借助 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();

【讨论】:

  • 我知道,我在为它编写 DQL 寻求帮助。
  • 为此,您必须显示要加入的表格
  • 谢谢,我以前用过DQL。我只是想知道如何限制在您查询的第三行加入的产品。我不想全部退回,而且在我的情况下,我无法使用可以帮助减少数量的条件。
  • 但这不是JOIN 任务。了解JOIN 及其使用时间
  • 我不是在问如何使用实际的 JOIN 来完成它,我只是在描述我想用 DQL 完成什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多