diff --git a/Event/Subscriber/DoctrineORMSubscriber.php b/Event/Subscriber/DoctrineORMSubscriber.php index f874001..b59bfbd 100644 --- a/Event/Subscriber/DoctrineORMSubscriber.php +++ b/Event/Subscriber/DoctrineORMSubscriber.php @@ -114,7 +114,10 @@ public function filterEntity(GetFilterConditionEvent $event) } else { $event->setCondition( $expr->eq($filterField, ':' . $paramName), - [$paramName => [$this->getEntityIdentifier($values['value'], $queryBuilder->getEntityManager()), Types::INTEGER]] + [$paramName => [ + $this->getEntityIdentifier($values['value'], $queryBuilder->getEntityManager()), + $this->getEntityIdentifierType($values['value'], $queryBuilder->getEntityManager()), + ]] ); } } @@ -142,4 +145,23 @@ protected function getEntityIdentifier($value, EntityManagerInterface $em) return array_shift($identifierValues); } + + /** + * @param object $value + * @return string + * @throws \RuntimeException + */ + protected function getEntityIdentifierType($value, EntityManagerInterface $em) + { + $class = get_class($value); + $metadata = $em->getClassMetadata($class); + + $identifierType = $metadata->getIdentifierFieldNames($value); + + if (empty($identifierType)) { + throw new \RuntimeException(sprintf('Can\'t get identifier value for class "%s".', $class)); + } + + return $metadata->getTypeOfField(array_shift($identifierType)); + } }