Symfony2,createQueryBuilder统计一对多的关系

时间:2017-06-18 02:32:20

标签: 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 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“在MyBundle中不存在:Recruitment:index.html.twig at the line 48”

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

2 个答案:

答案 0 :(得分:1)

所以你有这样的Candidat实体

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

]

答案 1 :(得分:0)

好的,谢谢,我找到了解决方案。 它在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'] }}........

查询很好。 谢谢