我在访问加入查询的值时遇到问题。我在一个存储库中构建了一个查询,该存储库加入/左加入表。
使以下代码有些可理解:我有预约。此约会是活动组的一部分,活动是活动组的一部分。活动组有参与者。在现实生活中,这意味着活动的每个参与者也是任命的参与者。例如,有一个培训中心。该中心有不同的培训课程(跑步,提起...)。每个课程都有不同小组的不同活动(例如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() }} <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") }} 09:30 Uhr</span>
</a>
</li>
{% endfor %}
实体和方法是正确的。其他查询工作正常。但是,有了这个方法,我得到了该方法不正确的符合错误。如果我不使用这些值和循环,则获得HTML元素的4倍。这也是结果的正确数量。内部联接可能有问题吗?因为这样,我不仅将ID的ID链接到DB中的其他实体,还可以多次加入事件吗?我可以以另一种方式访问值吗?
如果实体被正确映射,则可以通过直接访问它们来访问关系和属性:
{% 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方法。
如果它不起作用,则可以为您的实体添加代码,然后编辑我的答案。