Symfony2 Générateur de Formulaire - création d'un tableau de choix à partir d'une base de requête
Dans mon FormType classe, j'ai ceci dans la méthode buildForm:
//...
->add('businessUnit', 'entity', array(
'class' => 'TrainingBundle:Employee',
'attr' => array('class' => 'form-control select2'),
'property' => 'businessUnit',
'empty_value' => 'All Business Units',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('e')
->groupBy('e.businessUnit')
->orderBy('e.businessUnit', 'ASC')
;
},
'required' => false
//...
Cela fonctionne très bien, sauf qu'au lieu de "businessUnit" mis à la valeur de la <option>
tags-je obtenir l'ID de l'employé. Ce dont j'ai besoin est une liste déroulante avec tous distincts businessUnits dans la classe d'Employés. Peut-être que je devrais être à l'aide choice
au lieu de entity
, mais je ne suis pas sûr de la façon de générer l'ensemble des choix.
RÉPONSE
Comme décrit dans la accepté de répondre-je faire de cette fonction
private function fillBusinessUnit() {
$er = $this->em->getRepository('TrainingBundle:Employee');
$results = $er->createQueryBuilder('e')
->groupBy('e.businessUnit')
->orderBy('e.businessUnit', 'ASC')
->getQuery()
->getResult()
;
$businessUnit = array();
foreach($results as $bu){
$businessUnit[$bu->getBusinessUnit()] = $bu->getBusinessUnit();
}
return $businessUnit;
}
A dû passer dans l'EntityManager pour la forme. Et aussi mettre
use Doctrine\ORM\EntityManager;
au top de la forme
OriginalL'auteur Nick Barrett | 2014-04-04
Vous devez vous connecter pour publier un commentaire.
Utilisation
choice
à la place. Il doit être réglé avec un tableau, afin de créer une méthode pour le faire.Dans cette méthode, il suffit de lancer votre requête avec le
QueryBuilder
, puis la boucle les résultats, remplir un tableau et de le retourner.MODIFIER
Je suppose que vous instanciez votre Type dans un
Controller
de sorte que vous pouvez passer dans le Type de construction:puis dans votre classe de formulaire
YourType.php
:espère que cela aide 🙂
$er
variable?j'ai édité la réponse 🙂 @NickBarrett
Merci! J'ai dû faire quelques modifications, mais il fonctionne maintenant 🙂 (les changements dans la question d'origine)
grand, heureux il a travaillé. Oui désolé, j'ai écrit le code ici et je ne pourrais pas le tester. 🙂
OriginalL'auteur ponciste