Symfony2 - leftjoin - order by - count on right

时间:2014-06-04 10:54:10

标签: symfony count left-join

我有3个实体

  • " Ejuridique"与" onetomany"与

  • 的关系
  • "项目"与" onetomany"与

  • 的关系
  • "照片"

我需要一份每个" Ejuridique"他的第一个项目和第一个项目的第一张照片,就像这样。

ejuridique1 - project1_1 - photo1

ejuridique2 - project2_1 - photo1

ejuridique3 - project3_1 - photo1

并且,我想订购这个" Ejuridique"列出了" Ejuridique"

的项目总数

ejuridique2 - project2_1 - photo1(总共3个项目)

ejuridique1 - project1_1 - photo1(共2个项目)

ejuridique3 - project3_1 - photo1(共1个项目)

因此,我必须进行级联左联,并根据每个项目的计数来排序结果" Ejuridique"

使用querybuilder,我在leftjoins之后添加计数时收到错误。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您需要ResultSetMap。 DB Query Builder仅在您获得标量(数值)值或实体时才有效。当你想要检索它们时都不起作用(例如:ejuridique +项目计数)。

您可以通过以下链接Doctrine Documentation : native SQL找到更多信息。

修改

我使用您的问题中的修订历史记录来查找自删除以来您已编写的内容。流动的代码不会明显起作用,但我认为你无法同时获得第一个项目的第一张照片和计数。

public function getProjectCount()
{
    $rsm = new ResultSetMappingBuilder($this->_em);

    $rsm->addRootEntityFromClassMetadata('Foo\BarBundle\Entity\Ejuridique', 'e');
    $rsm->addJoinedEntityFromClassMetadata('Foo\BarBundle\Entity\Projects', 'pr', 'e', 'projets', array('id' => 'projet_id'));
    $rsm->addJoinedEntityFromClassMetadata('Foo\BarBundle\Entity\Photos', 'ph', 'pr', 'photos', array('id' => 'photos_id'));        
    $rsm->addScalarResult('ProjectCount', 'ProjectCount');   

    $sql = 'SELECT e.nom, count(pr.id) as ProjectCount
            FROM ejuridique e 
            INNER JOIN Project pr ON e.id = pr.ejuridique_id
            INNER JOIN Photo ph ON pr.id = ph.projet_id
            WHERE e.id = :eid
            GROUP BY project.id,
            ORDER BY ProjectCount';

    $query = $this->_em->createNativeQuery($sql, $qb);
    $query->setParameter('eid', 535);
    $query->setParameter('position_pr', 1);
    $query->setParameter('position_ph', 1);

    return $ejuridiques = $query->getResult();
}