2017-02-19 2 views
1

ジョイントクエリから値にアクセスする際に問題があります。私は、テーブルを結合/結合するリポジトリにクエリを構築しました。DoctrineのJoinクエリからの値へのアクセス

次のコードを少し分かりやすくするために、私は予定があります。この予定はイベントの一部であり、イベントはイベントグループの一部です。イベントグループには参加者がいます。実際の生活では、これはイベントのすべての参加者が予定に参加していることを意味します。たとえば、トレーニングセンターがあります。このセンターには、さまざまなトレーニングコース(ランニング、リフトなど)があります。各コースは、グループA(毎週月曜日と金曜日、グループBは常に火曜日と木曜日)の異なるイベントを持っています。だから、あなたはグループAに参加することができました。そして、アポイントメントは各グループの正しい日時です。

今私はすべての予定を1人から欲しがっています。だから私のクエリは次のようになります。

$qb = $this->createQueryBuilder('a') 
    ->leftJoin('a.event', 'event') 
    ->leftJoin('event.eventgroup', 'eventgroup') 
    ->innerJoin('event.participants', 'p', 'WITH', 'p.id = :id') 
    ->setParameter('id', $user->getId()) 
; 

return $qb->getQuery()->getResult(); 

私は教義を見るとMySQLで処理されたクエリを実行すると、私はまた、正しい結果を得ます。しかし、私の小枝ファイルのテーブルから値にアクセスしたい場合、それはうまくいきません。

{% for appointment in appointments|default(false) %} 
    <li class="list-group-item"> 
     <a href="livemode.html"> 
      <span class="col-md-4">{{ appointment.getEventGroup() }}&emsp;<span class="tag tag-default">{{ appointment.getName() }}</span></span> 
      <span class="col-md-4">{{ appointment.getTopicBlock().getName() }}</span> 
      <span>{{ appointment.getDate()|date("d.m.Y") }}&emsp;09:30 Uhr</span> 
     </a> 
    </li> 
{% endfor %} 

エンティティとメソッドは正しいです。他のクエリは正常に動作します。しかし、これでは、メソッドが正しくないSymfonyのエラーが出ます。値とループを使用しないと、html要素の4倍の値になります。これは結果の正確な量でもあります。内部結合に問題がありますか?そのため、IDをdb内の他のエンティティにリンクするだけではなく、複数回イベントに参加することはできません。別の方法で値にアクセスできますか?

+0

別の回答を追加するのは遅すぎますか?いすゞがうまくいくかもしれませんが、あなたが間違っていることがわかります... –

答えて

1

エンティティが適切にマッピングされている場合、あなたがそれらを直接アクセスすることによって、単純な関係やプロパティにアクセスすることができるはずです。

{% for appointment in appointments|default(false) %} 
    <li class="list-group-item"> 
     <a href="livemode.html"> 
      <span class="col-md-4">{{ appointment.eventGroup }} <span class="tag tag-default">{{ appointment.name }}</span></span> 
      <span class="col-md-4">{{ appointment.topicBlock.name }}</span> 
      <span>{{ appointment.date|date("d.m.Y") }} 09:30 Uhr</span> 
     </a> 
    </li> 
{% endfor %} 

これはAppointmentエンティティがマッピングされたEventGroup関係を持っていることを前提としてもゲッターを持っていますそれのための方法。

うまくいかない場合は、エンティティのコードを追加して回答を編集できます。

+1

ありがとうございます。どうして私がこれを自分でやったのか分かりません。以前の練習から何も変わっていません。私はちょっと疲れているかもしれません。私はこれの前に1時間以上座っていました;しかし、 'eventment'は' event'のために 'appointment'から' eventgroup'に直接アクセスできないので、 'appointment.event.eventgroup.getName()'と書く必要がありました。 'getName()'を呼び出すことによって 'name'属性を取得します。 – kruben

関連する問題