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.