/** * @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(); } }