首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Symfony2,createQueryBuilder计算一对多关系

Symfony2,createQueryBuilder计算一对多关系
EN

Stack Overflow用户
提问于 2017-06-18 10:32:20
回答 2查看 376关注 0票数 0

我有两个实体通过一对多的关系链接。招聘和应聘者一次招聘可能有多个应聘者。

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

我使用招聘存储库并将代码放入:

代码语言:javascript
运行
复制
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中,我有:

代码语言:javascript
运行
复制
$listRecruitment = $repository->myFindAllRecruitment();

在我的细枝视图中,类似于:

代码语言:javascript
运行
复制
{% for recruitment in listRecruitment %}

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

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-19 14:43:46

好的,谢谢,我找到解决方案了。它位于细枝渲染中:

对象可通过和1或'candidatCount‘进行计数访问

代码示例:

代码语言:javascript
运行
复制
{% 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'] }}........

查询结果也很好。谢谢

票数 0
EN

Stack Overflow用户

发布于 2017-06-18 17:51:36

所以你有一个像这样的候选实体

代码语言:javascript
运行
复制
......
/**
* @ORM\ManyToOne(targetEntity="Recruitment", inversedBy="candidates")
*/
$recruitment;
....

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

代码语言:javascript
运行
复制
   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();
    }

您将得到如下输出:

代码语言:javascript
运行
复制
[
  0 => [
   'rectuitment' => ...Object,
   'count'=> ...,
   ...

]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44611205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档