diff --git a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php index efb28dbdff66c..4d2fb4472655b 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php @@ -16,6 +16,7 @@ use Doctrine\ORM\EntityRepository; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\PropertyAccessors\RawValuePropertyAccessor; use Doctrine\ORM\Tools\SchemaTool; use Doctrine\Persistence\ManagerRegistry; use Doctrine\Persistence\ObjectManager; @@ -115,11 +116,21 @@ class_exists(ClassMetadataInfo::class) ? ClassMetadataInfo::class : ClassMetadat ->willReturn(true) ; $refl = $this->createMock(\ReflectionProperty::class); + $refl + ->method('getName') + ->willReturn('name') + ; $refl ->method('getValue') ->willReturn(true) ; - $classMetadata->reflFields = ['name' => $refl]; + + if (property_exists(ClassMetadata::class, 'propertyAccessors')) { + $classMetadata->propertyAccessors['name'] = RawValuePropertyAccessor::fromReflectionProperty($refl); + } else { + $classMetadata->reflFields = ['name' => $refl]; + } + $em->expects($this->any()) ->method('getClassMetadata') ->willReturn($classMetadata) diff --git a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php index b356f8068c15d..8089f820af124 100644 --- a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php +++ b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php @@ -11,6 +11,7 @@ namespace Symfony\Bridge\Doctrine\Validator\Constraints; +use Doctrine\ORM\Mapping\ClassMetadata as OrmClassMetadata; use Doctrine\Persistence\ManagerRegistry; use Doctrine\Persistence\Mapping\ClassMetadata; use Doctrine\Persistence\ObjectManager; @@ -92,7 +93,11 @@ public function validate(mixed $entity, Constraint $constraint) throw new ConstraintDefinitionException(sprintf('The field "%s" is not mapped by Doctrine, so it cannot be validated for uniqueness.', $fieldName)); } - $fieldValue = $class->reflFields[$fieldName]->getValue($entity); + if (property_exists(OrmClassMetadata::class, 'propertyAccessors')) { + $fieldValue = $class->propertyAccessors[$fieldName]->getValue($entity); + } else { + $fieldValue = $class->reflFields[$fieldName]->getValue($entity); + } if (null === $fieldValue && $this->ignoreNullForField($constraint, $fieldName)) { $hasIgnorableNullValue = true;