Doctrine запрос получает только «первое» из множества связанных (делает join & select, чтобы избежать N + 1) - PullRequest
0 голосов
/ 25 февраля 2019

В этой ситуации у меня есть 3 связанных объекта profile --OneToMany -> annualReports --ManyToOne -> photo

И в цикле для таблицы, для которой я проверяюсуществование фотографии в виде веточки вот так

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

Итак, profile может иметь много annualReports - в этой патетической ситуации мне нужен только самый первый «отчет».

Вопрос в том, как мне сделать это в QueryBuilder?То есть присоединение к «первому отчету» («первый» может быть основан на минимальном идентификаторе или дате создания)

ОБНОВЛЕНИЕ: я думаю, вопрос в том, как я могу «ОГРАНИЧИТЬ 1» и указать сортировку?

1 Ответ

0 голосов
/ 26 февраля 2019

Если вы хотите получить первый отчет в ветке, вам просто нужно использовать метод first класса Collection:

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

и для управления порядком вы должны использовать аннотацию доктрины '@OrderBy ': https://www.doctrine -project.org / projects / doctrine-orm / ru / 2.6 / reference / annotations-reference.html # orderby


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

...