*/ class AssociationFilter { use FilterTrait; public function buildProperty(FormBuilderInterface $builder, FieldDto $fieldDto, $options = array()) { $param = array(); $targetEntity = $options['entity_dto']->getPropertyMetadata($fieldDto->getProperty())->get('targetEntity'); if ($fieldDto->getCustomOption('choices')) { $choices = $fieldDto->getCustomOption('choices'); } elseif ($fieldDto->getFormTypeOption('choices') != null) { $choices = $fieldDto->getFormTypeOption('choices'); } else { $choices = array(); } if ($fieldDto->getFormTypeOption('choice_label') != null) { $param['choice_label'] = $fieldDto->getFormTypeOption('choice_label'); } //todo utiliser choices plutot que query_builder voir ProductCategoriesFilter $builder->add( $fieldDto->getProperty(), EntityType::class, array_merge( $param, array( 'class' => $targetEntity, 'placeholder' => '--', 'choices' => $choices, 'required' => false, 'attr' => array( 'class' => 'select2 input-sm', 'form' => 'filters-form', ), ) ) ); } public function applyFilter(RepositoryQueryInterface $repositoryQuery, FieldDto $fieldDto, $filteredValue = null) { $fieldProperty = $this->getFieldProperty($fieldDto); if ($filteredValue !== null) { if ($fieldDto->getFormTypeOption('multiple') || ($fieldDto->getTemplatePath() != null && str_contains($fieldDto->getTemplatePath(), 'association_many'))) { $repositoryQuery->andWhere(':' . $fieldProperty . ' MEMBER OF .' . $fieldProperty . ''); } else { $repositoryQuery->andWhere('.' . $fieldProperty . ' = :' . $fieldProperty . ''); } $repositoryQuery->setParameter($fieldProperty, $filteredValue); // // if ($filter instanceof TreeInterface && $filter->getParent() == null) { // $repositoryQuery->setParameter($field['property'], array_merge(array($filter), $filter->getChildrens()->toArray())); // } else { // } } } }