Symfony2,createQueryBuilder 计数一对多关系

Symfony2, createQueryBuilder count one to many relationship

我有 2 个通过一对多关系链接的实体。 招聘和候选人 一次招聘可能有很多候选人。

我想列出所有招聘信息,统计每个招聘信息有多少人

我使用招聘信息库并放置代码:

public function myFindAllRecruitment()
{
  $qb = $this->createQueryBuilder('r');
  $qb->select('r');
  $qb->Join('r.candidat', 'c');
  $qb->addSelect("COUNT(c.id) as candidatCount");
  $qb->groupBy('r.id');


 $qb->orderBy('r.id', 'DESC');

  return $qb
    ->getQuery()
    ->getResult()
  ;
}

在我的 RecruitmentController 中我有:

$listRecruitment = $repository->myFindAllRecruitment();

在我的 TWIG 视图中是这样的:

{% for recruitment in listRecruitment %}

            <tr>
                {#(this is line 48)#}<td>{{ recruitment.id }}</td>
                <td>{{ recruitment.titleFr }}</td>
                <td>{{ recruitment.locationFr }}</td>......

我收到这个错误: "Key "id" 键为“0,candidatCount”的数组在第 48 行的 MyBundle:Recruitment:index.html.twig 中不存在”

如果有人知道我的查询有什么问题,那就太好了。 谢谢

所以你有这样的候选实体

......
/**
* @ORM\ManyToOne(targetEntity="Recruitment", inversedBy="candidates")
*/
$recruitment;
....

那么您的查询应该如下所示:

   public function myFindAllRecruitment()
    {
      $qb = $this->createQueryBuilder('r');
      $qb->select('r');
         ->addSelect('(SELECT count(c) FROM PATHTO\Bundle\Entity\Candidat as c WHERE c.rectuitment = r.id group by c.rectuitment) as count)');
         ->orderBy('r.id', 'DESC');

      return $qb->getQuery()->getResult();
    }

你会得到这样的输出:

[
  0 => [
   'rectuitment' => ...Object,
   'count'=> ...,
   ...

]

好的,谢谢,我找到了解决方案。 它在 TWIG 渲染中:

对象可通过 [0] 和 [1] 或 ['candidatCount'] 访问

代码示例:

{% for recruitment in listRecruitment %}

            <tr>
                <td>{{ recruitment[0].id }}</td>
                <td>{{ recruitment[0].titleFr }}</td>
                <td>{{ recruitment[0].locationFr }}</td>
                <td>{{ recruitment[0].typePoste }}</td>
                <td>{{ recruitment[0].dateins|date('Y-m-d') | localizeddate('full', 'none') }}</td>
                <td>
                    {{ recruitment['candidatCount'] }}........

而且查询很好。 谢谢