学说:在1中合并4个计数

时间:2013-11-12 15:22:49

标签: sql symfony doctrine-orm

我想计算4个实体,例如DogCatFishTurtle

在同一视图中,我想显示狗的数量,猫的数量等。目前,每个实体在其存储库中都有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();

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

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

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

无论如何......如果你真的想在一个查询中执行此操作,我认为你需要执行自定义的sql查询,因为使用doctrine dql你总是需要引用一个实体来“启动”,所以doctrine可以补充这个对象

本机sql和doctrine

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

return $stmt->fetchAll();