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