使用 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() }} <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 %}
实体和方法正确。其他查询工作正常。但是对于这个,我得到一个 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 方法。
如果它不起作用,您可以为您的实体添加代码,然后我编辑我的答案。
我在访问连接查询中的值时遇到问题。我在 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() }} <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 %}
实体和方法正确。其他查询工作正常。但是对于这个,我得到一个 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 方法。
如果它不起作用,您可以为您的实体添加代码,然后我编辑我的答案。