我有两个由一对多关系链接的实体。 招聘和候选人 你可能有很多候选人参加招聘。
我想列出所有招聘,并计算每次招聘的候选人数。
我使用招聘信息库并输入代码:
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”
如果有人知道我的查询有什么问题,那就太好了。 谢谢
答案 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'] }}........
查询很好。 谢谢