使用 Twig 从 Doctrine 的联合查询中访问值

Accessing values from a joined query from Doctrine with Twig

我在访问连接查询中的值时遇到问题。我在 joins/left 加入 tables.

的存储库中构建了一个查询

为了让下面的代码更容易理解:我有一个约会。此约会是事件的一部分,而事件是事件组的一部分。事件组有参与者。在现实生活中,这意味着事件的每个参与者也是约会的参与者。例如,有一个培训中心。该中心有不同的培训课程(运行宁,提升......)。每门课程针对不同的组别都有不同的活动(比如 A 组总是在周一和周五,B 组总是在周二和周四)。因此,您可以参加 A 组的 运行ning。约会是每个组的正确日期和时间。

现在我想要一个人的所有约会。所以我的查询看起来像这样:

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

如果我查看 doctrine,当 运行 在 mysql 中处理查询时,我也会得到正确的结果。但是如果我想从我的树枝文件中的 table 访问一个值,它就不起作用。

{% 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 元素。这也是正确数量的结果。内部连接可能有问题吗?因为这样我不仅 link 数据库中其他实体的 ID,而且多次将它们加入到一个事件中?我可以通过其他方式访问这些值吗?

如果实体映射正确,您应该能够通过直接访问它们来访问关系和属性:

{% 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 方法。

如果它不起作用,您可以为您的实体添加代码,然后我编辑我的答案。