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

时间:2017-02-19 22:40:13

标签: sql symfony doctrine-orm twig doctrine-query

我在访问联接查询中的值时遇到问题。我在一个连接/离开连接表的存储库中构建了一个查询。

使下面的代码有点容易理解:我有一个约会。此约会是活动的一部分,活动是活动组的一部分。活动组有参与者。在现实生活中,这意味着事件的每个参与者也是约会的参与者。例如,有一个培训中心。该中心有不同的培训课程(跑步,升降......)。每个课程针对不同的团体有不同的活动(例如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();

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

{% 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链接到数据库中的其他实体,而是多次将它们连接到事件?我可以用其他方式访问这些值吗?

1 个答案:

答案 0 :(得分:1)

如果实体已正确映射,您应该可以直接访问它们来访问关系和属性:

Appointment

这假定EventGroup实体已映射{{1}}关系,并且还有一个getter方法。

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