2017-06-18 133 views
0

我有2個實體通過一對多關係鏈接。 招聘和候選人 你可能有許多候選人一次招聘。Symfony2,createQueryBuilder計數一對多關係

我想列出所有招聘人數並計算每次招聘有多少人蔘加。

我用招聘信息庫,並把代碼:

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(); 

在我的嫩枝看法是這樣的:

{% for recruitment in listRecruitment %} 

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

我得到這個錯誤: 「鑰匙」ID「陣列與鍵」0,candidatCount「doe在MyBundle中不存在:招募:第48行的index.html.twig「

如果有人知道我的查詢出了什麼問題,它會很好。 謝謝

+0

請注意,我試圖加入並在查詢中加入 – sim100

回答

0

好的,謝謝,我找到了解決方案。 正是在樹枝渲染:

對象是與訪問[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'] }}........ 

和查詢很好。 謝謝

1

所以,你有這樣的

...... 
/** 
* @ORM\ManyToOne(targetEntity="Recruitment", inversedBy="candidates") 
*/ 
$recruitment; 
.... 

這Candidat實體然後將查詢應該是這樣的:

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

]