原则查询仅获得许多相关的“第一”(进行连接并选择以避免N + 1)

时间:2019-02-25 15:24:12

标签: symfony doctrine

在这种情况下,我有3个相关实体 profile --OneToMany-> annualReports --ManyToOne-> photo

在一个循环中,对于一张桌子,我正在检查像这样的树枝中是否存在照片

{% set is_photo = profile.annualReports.toArray()[0].photo.id is defined %}

因此,profile可以有很多annualReports-这种情况我只想要第一个“报告”。

问题是如何在QueryBuilder中执行此操作?即加入“第一份报告”(“第一份报告可以基于最小id或createdAt日期)

更新: 我想问题是我怎么能“限制1”并指定排序?

1 个答案:

答案 0 :(得分:2)

如果要获取第一个报告,只需使用Collection类的方法first即可:

{% if profile.annualReports IS NOT EMPTY %}
   {% set report = profile.annualReports.first %}
{% endif%}

并且要管理订单,您必须使用原则注释'@OrderBy': https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/annotations-reference.html#orderby


/**
 * @ManyToMany(targetEntity="Group")
 * @OrderBy({"name" = "ASC"})
 */
private $groups;