[Symfony 2] Custom select dropdown à partir d'une entity
Bonjour à tous,
J'ai un souci assez ennuyeux... Je dois créer à partir d'une query SQL ma dropdown list pour un formulaire.
Voici ma query (qui fonctionne très bien quand je la joue sur Navicat) :
Code:
1 2 3 4 5 6 7
| SELECT DISTINCT o.name FROM organisation o
INNER JOIN relorganisationrecherche rel ON rel.organisation_id = o.id
UNION
SELECT DISTINCT o.name FROM organisation o
WHERE o.id IN (SELECT DISTINCT o.parent_id FROM organisation o
INNER JOIN relorganisationrecherche rel ON rel.organisation_id = o.id)
ORDER BY name |
Le gros problème est que Doctrine 2.0 ne comprend pas la syntaxe UNION, donc DQL et QueryBuilder impossible à utiliser.
J'ai donc pensé, dans mon formulaire, à utiliser l'option "property" qui permet d'utiliser une méthode de la classe précisée pour construire la dropdown... La aussi ça cloche, je ne peux pas accéder à mon Repository dans ma classe Entity...
Je ne peux pas utiliser le type choice pour le formulaire, car mon champs doit être mappé à une classe spécifique pour la suite de la gestion, donc je ne peux pas build un array à partir d'une static méthode ou quoi que ce soit dans ce style là.
Il me faudrait en fait un moyen de getEntityManager() lorsque je suis dans mon entity, ou alors de pouvoir utiliser dans l'option query_builder de mon champs, une syntaxe SQL...
Voici le code du champs de mon formulaire :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| ->add('organisations', 'entity', array(
'class' => 'ResearchBundle:Organisation',
//'property' => 'getOrgaList',
//'choices' => $this->getOrgaList(),
'multiple' => false,
'required' => false,
'empty_value' => 'Liste des organisations',
'label' => 'Organisation',
// 'query_builder' => function (\Cofraref\Cofradmin\ResearchBundle\Entity\OrganisationRepository $er) {
// return $er->createQueryBuilder('s')
// ->select('organisation')
// ->from('\Cofraref\Cofradmin\ResearchBundle\Entity\Organisation', 'organisation')
// ->innerJoin('organisation.recherches', 'rel')
// ->add('orderBy', 'organisation.name ASC');
// }
)) |
Merci d'avance pour votre aide, j'avoue que je sèche un peu là...