Symfony tworzą repozytorium query_buider i jednostki

Próbuję utworzyć formularz z danymi w typie kolekcji w zależności od zalogowanego użytkownika. podążamten rozdział książki kucharskiej Symfony.

Wszystko działa dobrze, gdyquery_builder opcja jest zamknięciem, w którym otrzymuję moje dane z DQL. Ponieważ dane muszą być pobierane z innej lokalizacji w kodzie, wolałbym zdefiniować zapytanie w klasie Repository.

Oto funkcja w moim repozytorium:

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();
}

Ta funkcja działa, gdy jest wywoływana w kontrolerze i zwraca tablicę artykułu. Oto fragment dokumentu 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!)
                    },
                );

Kiedy wprowadzam wywołanie do mojej funkcji Repozytorium w query_builder, pojawia się błąd:Expected argument of type "Doctrine\ORM\QueryBuilder", "array" given, co mogę zrozumieć, ponieważ moje Repozytorium zwraca tablicę Entity, a nie QueryBuilder.

Nie chcę duplikować kodu i tworzyć nowego QueryBuildera w formularzu. Jaka jest najlepsza praktyka korzystania z zapytania z repozytorium? Myślałem o posiadaniu dwóch funkcji w repozytorium, jednej zwracającej tablicę, a drugiej zwracającej QueryBuilder, ale komentarza w dokumencie Symfony ”lub wywołaj metodę w swoim repozytorium (nawet lepiej!)„pozwól, że pomyślę, że w tym przypadku jest lepszy sposób.

questionAnswers(2)

yourAnswerToTheQuestion