2017-02-19 21 views
1

訪問加入查詢中的值時遇到問題。我在連接/離開連接表的Repository中構建了一個查詢。訪問來自使用Twig的Doctrine加入的查詢的值

爲了使下面的代碼有點可以理解:我有一個約會。此約會是事件的一部分,事件是事件組的一部分。一個事件組有參與者。在現實生活中,這意味着每個事件的參與者也是約會的參與者。例如,有一個培訓中心。這個中心有不同的培訓課程(跑步,解除......)。每個課程對於不同的小組都有不同的活動(例如A組總是星期一和星期五,B組總是星期二和星期四)。所以你可以參加組A的運行。約會是每個組的正確日期和時間。

現在我想要一個人的所有約會。所以我的查詢看起來像這樣:

$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錯誤,該方法是不正確的。如果我不使用值和循環,我得到4倍的html元素。這也是結果的正確數量。內連接可能有問題嗎?因爲在那裏,我不只是將ID鏈接到數據庫中的其他實體,而是將它們多次加入事件?我可以通過其他方式訪問這些值嗎?

+0

添加其他答案爲時已晚? Isouza的可能工作,但我看到你在做什麼錯... –

回答

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關係,也有一個getter方法。

如果它不起作用,您可以爲您的實體添加代碼,然後編輯我的答案。

+1

謝謝。我真的不知道爲什麼我自己沒有這樣做。以前的做法沒有什麼改變。可能是我有點累了。我坐在這個面前超過1個小時; D但是我必須寫'appointment.event.eventgroup.getName()',因爲我當然沒有從'appointment'到'eventgroup'的直接訪問,因爲'event'是之間,然後通過調用'getName()'獲得'name'屬性 – kruben