0

我想计算 4 个实体,例如Dog、和。CatFishTurtle

在同一个视图中,我想显示狗的数量、猫的数量等。目前,每个实体count()在其存储库中都有一个方法,但这个解决方案会生成 4 个查询。

您有解决方案来进行单个查询吗?例如像这样的东西(不起作用):

return $this->getEntityManager()->createQuery(
    SELECT COUNT(d) AS nbDogs,
           COUNT(c) AS nbCats,
           COUNT(f) AS nbFishes,
           COUNT(t) as nbTurtles
    FROM AcmeBundle:Dog d,
         AcmeBundle:Cat c,
         AcmeBundle:Fish f,
         AcmeBundle:Turtle t)
    ->getResult();
4

2 回答 2

2

我认为以下应该有效:

return $this->getEntityManager()->createQuery('
    SELECT COUNT(DISTINCT d) AS nbDogs,
           COUNT(DISTINCT c) AS nbCats,
           COUNT(DISTINCT f) AS nbFishes,
           COUNT(DISTINCT t) as nbTurtles
    FROM AcmeBundle:Dog d,
         AcmeBundle:Cat c,
         AcmeBundle:Fish f,
         AcmeBundle:Turtle t
    ')
    ->getResult();
于 2013-11-12T15:40:33.010 回答
1

实际上,如果您从 4 个不同的表中选择一个或为每个表创建 4 个查询,我认为这并不重要。

您可以创建一个收集不同信息的服务,并通过在您的服务周围包装自定义树枝扩展来在树枝模板中使用它,例如

无论如何...如果您真的想在一个查询中执行此操作,我认为您需要执行自定义 sql 查询,因为使用教义 dql 您总是需要引用一个实体来“开始”,因此教义可以水合这个对象

本机 sql 和学说的小例子

$query  = 'SELECT * FROM MYTABLE';
$stmt   = $this->em->getConnection()->prepare($query);
$stmt->execute();

return $stmt->fetchAll();
于 2013-11-12T15:50:39.680 回答