8000 forward-compatibility with field mappings in Doctrine ORM 4 · symfony/symfony@4c677b2 · GitHub
[go: up one dir, main page]

Skip to content

Commit 4c677b2

Browse files
committed
forward-compatibility with field mappings in Doctrine ORM 4
1 parent 03ebef7 commit 4c677b2

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

src/Symfony/Bridge/Doctrine/Validator/DoctrineLoader.php

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
use Doctrine\ORM\EntityManagerInterface;
1515
use Doctrine\ORM\Mapping\ClassMetadata as OrmClassMetadata;
16+
use Doctrine\ORM\Mapping\FieldMapping;
1617
use Doctrine\ORM\Mapping\MappingException as OrmMappingException;
1718
use Doctrine\Persistence\Mapping\MappingException;
1819
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
@@ -69,7 +70,7 @@ public function loadClassMetadata(ClassMetadata $metadata): bool
6970
foreach ($doctrineMetadata->fieldMappings as $mapping) {
7071
$enabledForProperty = $enabledForClass;
7172
$lengthConstraint = null;
72-
foreach ($metadata->getPropertyMetadata($mapping['fieldName']) as $propertyMetadata) {
73+
foreach ($metadata->getPropertyMetadata(self::getFieldMappingValue($mapping, 'fieldName')) as $propertyMetadata) {
7374
// Enabling or disabling auto-mapping explicitly always takes precedence
7475
if (AutoMappingStrategy::DISABLED === $propertyMetadata->getAutoMappingStrategy()) {
7576
continue 2;
@@ -89,26 +90,26 @@ public function loadClassMetadata(ClassMetadata $metadata): bool
8990
continue;
9091
}
9192

92-
if (true === ($mapping['unique'] ?? false) && !isset($existingUniqueFields[$mapping['fieldName']])) {
93-
$metadata->addConstraint(new UniqueEntity(['fields' => $mapping['fieldName']]));
93+
if (true === (self::getFieldMappingValue($mapping, 'unique') ?? false) && !isset($existingUniqueFields[self::getFieldMappingValue($mapping, 'fieldName')])) {
94+
$metadata->addConstraint(new UniqueEntity(['fields' => self::getFieldMappingValue($mapping, 'fieldName')]));
9495
$loaded = true;
9596
}
9697

97-
if (null === ($mapping['length'] ?? null) || null !== ($mapping['enumType'] ?? null) || !\in_array($mapping['type'], ['string', 'text'], true)) {
98+
if (null === (self::getFieldMappingValue($mapping, 'length') ?? null) || null !== (self::getFieldMappingValue($mapping, 'enumType') ?? null) || !\in_array(self::getFieldMappingValue($mapping, 'type'), ['string', 'text'], true)) {
9899
continue;
99100
}
100101

101102
if (null === $lengthConstraint) {
102-
if (isset($mapping['originalClass']) && !str_contains($mapping['declaredField'], '.')) {
103-
$metadata->addPropertyConstraint($mapping['declaredField'], new Valid());
103+
if (self::getFieldMappingValue($mapping, 'originalClass') && !str_contains(self::getFieldMappingValue($mapping, 'declaredField'), '.')) {
104+
$metadata->addPropertyConstraint(self::getFieldMappingValue($mapping, 'declaredField'), new Valid());
104105
$loaded = true;
105-
} elseif (property_exists($className, $mapping['fieldName']) && (!$doctrineMetadata->isMappedSuperclass || $metadata->getReflectionClass()->getProperty($mapping['fieldName'])->isPrivate())) {
106-
$metadata->addPropertyConstraint($mapping['fieldName'], new Length(['max' => $mapping['length']]));
106+
} elseif (property_exists($className, self::getFieldMappingValue($mapping, 'fieldName')) && (!$doctrineMetadata->isMappedSuperclass || $metadata->getReflectionClass()->getProperty(self::getFieldMappingValue($mapping, 'fieldName'))->isPrivate())) {
107+
$metadata->addPropertyConstraint(self::getFieldMappingValue($mapping, 'fieldName'), new Length(['max' => self::getFieldMappingValue($mapping, 'length')]));
107108
$loaded = true;
108109
}
109110
} elseif (null === $lengthConstraint->max) {
110111
// If a Length constraint exists and no max length has been explicitly defined, set it
111-
$lengthConstraint->max = $mapping['length'];
112+
$lengthConstraint->max = self::getFieldMappingValue($mapping, 'length');
112113
}
113114
}
114115

@@ -132,4 +133,13 @@ private function getExistingUniqueFields(ClassMetadata $metadata): array
132133

133134
return $fields;
134135
}
136+
137+
private static function getFieldMappingValue(FieldMapping|array $mapping, string $key): mixed
138+
{
139+
if ($mapping instanceof FieldMapping) {
140+
return $mapping->$key;
141+
}
142+
143+
return $mapping[$key] ?? null;
144+
}
135145
}

0 commit comments

Comments
 (0)
0