Я пытаюсь создать форму с данными в типе коллекции в зависимости от пользователя, который регистрируется. Я следую этой главе кулинарной книги Symfony.
Все отлично работает, когда опция query_builder
является закрытием, где я получаю свои данные из DQL. Поскольку данные нужно извлекать из разных мест в коде, я бы предпочел определить запрос в классе репозитория.
Вот функция в моем репозитории:
public function findOwnedBy($user) {
$query = $this->getEntityManager()->createQuery("SELECT l FROM MyBundle:Article a JOIN a.owndBy u WHERE u.id = :userId");
$query->setParameters(array("userId"=>$user->getId()));
return $query->getResult();
}
Эта функция работает при вызове в контроллере и возвращает массив статьи. Вот фрагмент документа symfony:
$formOptions = array(
'class' => 'Acme\DemoBundle\Entity\User',
'multiple' => false,
'expanded' => false,
'property' => 'fullName',
'query_builder' => function(EntityRepository $er) use ($user) {
// build a custom query, or call a method on your repository (even better!)
},
);
Когда я отправляю вызов функции Repository в query_builder, я получаю сообщение об ошибке: Expected argument of type "Doctrine\ORM\QueryBuilder", "array" given
, что я могу понять, потому что мой репозиторий возвращает массив Entity, а не QueryBuilder.
Я не хочу дублировать код и создавать новый QueryBuilder в форме. Какова наилучшая практика использования запроса из репозитория? Я думал о наличии двух функций в репозитории, один возвращал массив, а другой возвращал QueryBuilder, но комментарий в документе Symfony doc или вызывал метод в вашем репозитории (даже лучше!) "Позвольте мне подумать, что лучший способ для этого случай.