Query d'un "entity field" dépendant d'un autre champ
Bonjour,
Le contexte: j'ai quatre entités, "Responsable", "Enfant", "Famille" et "Paiement", chaque paiement étant lié à un responsable (payeur) et à un enfant (pour qui le paiement a été effectué). L'entité "Famille" lie un responsable (père, mère ou tuteur) aux enfants de la famille (cette entité intermédiaire est nécessaire car elle contient des infos). Pour ajouter un paiement, je choisis d'abord le responsable, j'obtiens ensuite un formulaire "Responsable" dans lequel j'ai inséré un formulaire imbriqué "Paiements" basé sur "PaiementType". Dans "PaiementType" j'ai un champ "Entity Field" (enfant) qui doit me permettre de sélectionner l'enfant.
Ma question est la suivante: comment puis-je limiter le choix de cet "entity field" aux seuls enfants de la famille du responsable, au niveau du query_builder? J'ai essayé via form.vars.value.. mais la liste est vide à ce moment.:(
Merci d'avance
Papynouche
Query_builder utilisant un argument
Bien voilà, j'ai trouvé une solution à mon problème en passant l'id du "Responsable" d'abord au constructeur de "ResponsableType" qui le sauve dans une variable local qui lui-même est passé comme argument du constructeur du type imbriqué ("PaiementType"); la fonction "buildForm" sauve localement la variable de la classe "PaiementType", qui est ensuite utilisée dans le query_builder; voici la fonction buildForm de "PaiementType":
public function buildForm(FormBuilder $builder, array $options)
{
$id = $this->respId; // respId est la variable ou le constructeur sauve l'id reçue
$builder
->add('datePaiement')
->add('montantPaiement')
->add('typeMontant', 'typepaiement' , array(
'label' => "Type paiement",))
->add('refExtraitCompte')
->add('note')
->add('enfant', 'entity', array
(
'label' => "Enfant",
'class' => 'PAGPPortailBundle:Enfant',
'query_builder' => function(EntityRepository $er) use ($id) {
return $er->createQueryBuilder ('e')
->join('e.famille', 'f')
->addSelect('f')
->join('f.responsable', 'r')
->addselect('r')
->where('r.id = :id')
->setParameter('id', $id )
;
},
'property' => 'NomPrenom',
)
)
;
}