我有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之后添加计数时收到错误。
非常感谢你的帮助。
答案 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();
}