Symfony2,createQueryBuilder 计数一对多关系
Symfony2, createQueryBuilder count one to many relationship
我有 2 个通过一对多关系链接的实体。
招聘和候选人
一次招聘可能有很多候选人。
我想列出所有招聘信息,统计每个招聘信息有多少人
我使用招聘信息库并放置代码:
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”的数组在第 48 行的 MyBundle:Recruitment:index.html.twig 中不存在”
如果有人知道我的查询有什么问题,那就太好了。
谢谢
所以你有这样的候选实体
......
/**
* @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'=> ...,
...
]
好的,谢谢,我找到了解决方案。
它在 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'] }}........
而且查询很好。
谢谢
我有 2 个通过一对多关系链接的实体。 招聘和候选人 一次招聘可能有很多候选人。
我想列出所有招聘信息,统计每个招聘信息有多少人
我使用招聘信息库并放置代码:
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”的数组在第 48 行的 MyBundle:Recruitment:index.html.twig 中不存在”
如果有人知道我的查询有什么问题,那就太好了。 谢谢
所以你有这样的候选实体
......
/**
* @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'=> ...,
...
]
好的,谢谢,我找到了解决方案。 它在 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'] }}........
而且查询很好。 谢谢