Symfony2,createQueryBuilder计数一对多关系

Symfony2,createQueryBuilder计数一对多关系,symfony,count,query-builder,Symfony,Count,Query Builder,我有两个实体通过一对多关系链接。 征聘和候选人 一次招聘可能有许多候选人 我想列出所有招聘,并计算每个招聘有多少候选人 我使用招聘库并输入代码: public function myFindAllRecruitment() { $qb = $this->createQueryBuilder('r'); $qb->select('r'); $qb->Join('r.candidat', 'c'); $qb->addSelect("COUNT(c.id) as

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

我想列出所有招聘,并计算每个招聘有多少候选人

我使用招聘库并输入代码:

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()
  ;
}
在我的招聘主管中,我有:

$listRecruitment = $repository->myFindAllRecruitment();
在我的小树枝视图中,类似于:

{% for recruitment in listRecruitment %}

            <tr>
                {#(this is line 48)#}<td>{{ recruitment.id }}</td>
                <td>{{ recruitment.titleFr }}</td>
                <td>{{ recruitment.locationFr }}</td>......
我得到了这个错误: 键为0的数组的键id,MyBundle中不存在CandidateCount:Recruption:index.html.twig第48行

如果有人知道我的问题出在哪里,那就好了。
谢谢

你有这样的候选实体

......
/**
* @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'=> ...,
   ...

]
您将得到如下输出:

   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'=> ...,
   ...

]

好的,谢谢,我找到了解决办法。 它在细枝渲染中:

对象可通过[0]和[1]或[CandidateCount]进行访问

代码示例:

{% 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'] }}........
这个问题很好。
谢谢

注意,我在查询中尝试了join和leftJoin