2017-04-15 4 views
0

結果、私はこれは私がしようとしているときSymfony2の+ Doctrineは、参加-テーブルをCOUNTしようとすると、

select *, COUNT(v.blueprint_id) as votecount from blueprint b 
left join vote v on b.id = v.blueprint_id 
where b.name like '%%' 
group by b.id 
order by votecount desc 

を達成しようとしているクエリであるsymfonyの

$qb = $em->createQueryBuilder('b') 
     ->from('AppBundle:Blueprint', 'b') 
     ->select('b, COUNT(v.id) as votecount') 
     ->leftJoin('AppBundle:Vote', 'v', 'WITH', 'b.id = v.blueprint') 
     ->groupBy('b.id') 
     ->orderBy('votecount', 'desc') 
    ; 

でこのクエリを作成しましたtwigのBlueprint.nameにアクセスするには、次のエラーが表示されます。

キーが "0、votecount"の配列のキー "name"は存在しません。

私は 'b.name as name'を設定します。 そして、それはそれぞれの変数のために、私は小枝でアクセスしようとします。 本当に、私は小枝でレンダリングしようとする各変数のエイリアスを設定する必要がありますか?

私はすでに2時間のように多くのオンラインリソースを使用していたので、この問題に取り組んでいますが、この非常に単純な問題の解決策は見つけられません。

ご協力いただきありがとうございます。

+0

あなたのbluep、青写真エンティティPLUS votecountを選択していますrintエンティティは '$ result [0]'にあり、対応するvotecountは '$ result ['votecount']'にあります。だから、例えば '$ result [0] - > getName()'を使うことができます。これはエラーがあなたに伝えている行で、行には索引 '[0]'(ブループリントエンティティを含む)と '['votecount']'(votecountを含む)のみがあります。 – ccKep

答えて

0

これはドライ符号化されているが、私はそれはあなたが軌道に乗ることができます願っています:あなたのコントローラで

、たとえばのために:

/** 
* @Route("/", name="my_route") 
* @Template("some_template.html.twig") 
*/ 
public function myAction(Request $request) 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $qb = $em->createQueryBuilder('b') 
      ->from('AppBundle:Blueprint', 'b') 
      ->select('b, COUNT(v.id) as votecount') 
      ->leftJoin('AppBundle:Vote', 'v', 'WITH', 'b.id = v.blueprint') 
      ->groupBy('b.id') 
      ->orderBy('votecount', 'desc') 
     ; 

    $blueprint_votes = $qb->getQuery()->getResult(); 

    return array(
     "blueprint_votes" => $blueprint_votes 
    ); 
} 

テンプレートで(some_template.html.twig ):あなたはちょうどその上で `.name`を使用することはできませんので

<table> 
    <thead> 
     <tr> 
      <th>Blueprint ID</th> 
      <th>Blueprint Name</th> 
      <th>Votes</th> 
     </tr> 
    </thead> 
    <tbody> 
     {%- for bv in blueprint_votes -%} 
     <tr> 
      <td>{{ bv[0].id }}</td> 
      <td>{{ bv[0].name }}</td> 
      <td>{{ bv['votecount'] }}</td> 
     </tr> 
     {%- endfor -%} 
    </tbody> 
</table> 
関連する問題