Позвольте мне попытаться объяснить это. Доктрина 2 ORM требует небольшого переосмысления. В настоящее время у вас есть мышление, что кролик должен иметь возможность запрашивать морковь всякий раз, когда он нуждается в них. Вам нужно изменить это мышление.
Для Доктрины 2 идея состоит в том, чтобы дать кроликам их морковь, как только вы создадите кролика. Другими словами, это делается во время запроса. Предполагается, что любой процесс, запрашивающий базу данных для кроликов, знает, что вам также нужен определенный набор моркови.
В этом случае вам нужна 10 самых дорогих морковок, поэтому ваш процесс должен это знать. Итак, теперь вы вернетесь к ответу @Arms и создадите сервис RabbitManager с методом loadRabbitsWithExoyCarrots. Возвращаемым значением будет массив кроликов с уже заполненной морковью.
Обновлено это для учета комментариев.
- Хранилище Doctrine 2 против службы Symfony 2
Репозиторий имеет тенденцию фокусироваться на одном типе сущности, то есть Репозиторий Кролика лучше всего использовать, когда имеешь дело только с Кроликами. Когда вы начинаете сталкиваться с более сложными требованиями, требующими нескольких типов сущностей, может стать трудно определить, в каком хранилище должна быть заданная функция. Ваша прикладная программа (контроллер) должна знать, какой хранилище ввести и, возможно, больше о внутренностях, чем нужно знать.
Служба Symfony 2 скрывает все детали того, как организованы ваши кролики и морковь. Это более общая концепция, и она может иметь дело с более сложными запросами, затрагивающими несколько объектов. Это основной строительный блок S2, и вам действительно нужно освоиться с ним.
Для вашего текущего требования подойдет любой подход.
- Вопрос о параметре моркови
Все еще не уверен, что именно ты имеешь в виду. Возможно, вы можете опубликовать пример запроса? Имейте в виду, что вы, безусловно, можете добавить метод getExoyCarrots () к вашему объекту rabbit. Метод начал бы вызывать getCarrots (). Возвращенная морковь была бы уже загружена первоначальным запросом. Ваш метод будет фильтровать и сортировать.
И имейте в виду, что мы пытаемся разобраться со случаем, когда к кролику могут быть присоединены сотни или тысячи морковок. Поэтому мы стараемся не загружать всю морковь только из соображений производительности. Это может быть легче начать, не загружая морковь вообще в начальном запросе. Вместо этого при первом вызове вашего rabbit-> getCarrots () Doctrine 2 автоматически выдаст запрос и загрузит всю морковь для этого кролика. И затем снова ваш метод getExорогоCarrots будет фильтровать и сортировать по мере необходимости.
Надеюсь, это поможет. Возможно, просто запутал вас еще больше.