我有一个问题是找到一种替代方法来计算患有病理的用户(带有分组的计数) 问题是我不想在病态上做一个for循环来计算,我想如果我能得到你的建议。 这是我的一些代码:
用户实体:
/**
* @ORM\OneToMany(targetEntity="Hospitalisation", mappedBy="user")
*/
private $hospitalisations;
住院实体:
/**
* @ORM\ManyToOne(targetEntity="Pathologie", inversedBy="hospitalisations")
*/
private $pathologie;
病理学实体:
/**
* @ORM\OneToMany(targetEntity="Hospitalisation", mappedBy="pathologie")
*/
private $hospitalisations;
我要做的是计算数据库中每个病理受害者的数量。 谢谢:))
答案 0 :(得分:1)
http://symfony.com/doc/current/book/doctrine.html#custom-repository-classes
添加此(未测试):
public function countUsers($pathologieID)
{
$result = $this->getEntityManager()
->createQuery("
SELECT COUNT(u) as c FROM YourMainBundle:Users u
JOIN u.hospitalisations h
JOIN h.pathologies p
WHERE
p.id = :pathologie
")
->setParameter('pathologie', $pathologieID)
->setMaxResults(1)
->getSingleResult();
return $result['c'];
}
如果你想在twig中这样做(伪):
for pathologie as p
print p.countUsers(p.id)
您必须在pathologie实体类中创建一个方法。但是你不能在实体类中使用实体管理器(你可以使用hack但不建议这样做)。所以你必须使用循环来计算用户数。
public function getUserCount()
{
$hospitalisations = $this->getHospitalisations();
$counter = 0;
foreach ($hospitalisations as $h)
{
$counter += count($h->getUsers());
}
return $counter;
}
答案 1 :(得分:0)
我解决了这个问题。 这是我提出的解决方案:
$result = $this->getEntityManager()
->createQuery("
SELECT p.id, p.nom, COUNT(DISTINCT u) as nbUsers , COUNT(DISTINCT i) as nbImported
FROM AcmeDemoBundlePathologie p
left JOIN p.importedUsers i
left JOIN p.hospitalisations h
left JOIN h.user u
GROUP BY p.id, p.nom
")
->getArrayResult();