/**
  * @param GetFilterConditionEvent $event
  * @throws \Exception
  */
 public function filterEntity(GetFilterConditionEvent $event)
 {
     $expr = $event->getFilterQuery()->getExpr();
     $values = $event->getValues();
     if (is_object($values['value'])) {
         $paramName = $this->generateParameterName($event->getField());
         $filterField = $event->getField();
         /**
          * @var QueryBuilder $queryBuilder
          */
         $queryBuilder = $event->getQueryBuilder();
         if ($dqlFrom = $event->getQueryBuilder()->getDQLPart('from')) {
             $rootPart = reset($dqlFrom);
             $fieldName = ltrim($event->getField(), $rootPart->getAlias() . '.');
             $metadata = $queryBuilder->getEntityManager()->getClassMetadata($rootPart->getFrom());
             if (isset($metadata->associationMappings[$fieldName]) and (!$metadata->associationMappings[$fieldName]['isOwningSide'] or $metadata->associationMappings[$fieldName]['type'] == ClassMetadataInfo::MANY_TO_MANY)) {
                 $queryBuilder->leftJoin($event->getField(), $fieldName);
                 $filterField = $fieldName;
             }
         }
         if ($values['value'] instanceof Collection) {
             $ids = array();
             foreach ($values['value'] as $value) {
                 $ids[] = $this->getValueIdentifier($value);
             }
             if (count($ids) > 0) {
                 $event->setCondition($expr->in($filterField, ':' . $paramName), array($paramName => array($ids, Connection::PARAM_INT_ARRAY)));
             }
         } else {
             $event->setCondition($expr->eq($filterField, ':' . $paramName), array($paramName => array($this->getValueIdentifier($values['value']), Type::INTEGER)));
         }
     }
 }
 public function filterTextEntity(GetFilterConditionEvent $event)
 {
     $qb = $event->getQueryBuilder();
     $values = $event->getValues();
     $alias = $values["alias"];
     $select = $qb->getDQLPart("select")[0]->getParts();
     if (!empty($values['value'])) {
         $qb->select($select)->where($alias . '.id = :id')->setParameter('id', $values['value']->getId())->orderBy($alias . '.id', 'DESC')->getQuery();
     }
 }