Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitff5dc26

Browse files
committed
bug#53754 [DoctrineBridge] forward-compatibility with field mappings in Doctrine ORM 4 (xabbuh)
This PR was merged into the 5.4 branch.Discussion----------[DoctrineBridge] forward-compatibility with field mappings in Doctrine ORM 4| Q | A| ------------- | ---| Branch? | 5.4| Bug fix? | no| New feature? | no| Deprecations? | no| Issues || License | MITseedoctrine/orm#11211Commits-------264f7fc forward-compatibility with field mappings in Doctrine ORM 4
2 parents84ae858 +264f7fc commitff5dc26

File tree

3 files changed

+54
-22
lines changed

3 files changed

+54
-22
lines changed

‎src/Symfony/Bridge/Doctrine/Form/DoctrineOrmTypeGuesser.php‎

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

1414
useDoctrine\DBAL\Types\Types;
1515
useDoctrine\ORM\Mapping\ClassMetadataInfo;
16+
useDoctrine\ORM\Mapping\JoinColumnMapping;
1617
useDoctrine\ORM\Mapping\MappingExceptionasLegacyMappingException;
1718
useDoctrine\Persistence\ManagerRegistry;
1819
useDoctrine\Persistence\Mapping\MappingException;
@@ -119,13 +120,13 @@ public function guessRequired(string $class, string $property)
119120
if ($classMetadata->isAssociationWithSingleJoinColumn($property)) {
120121
$mapping =$classMetadata->getAssociationMapping($property);
121122

122-
if (!isset($mapping['joinColumns'][0]['nullable'])) {
123+
if (null ===self::getMappingValue($mapping['joinColumns'][0],'nullable')) {
123124
// The "nullable" option defaults to true, in that case the
124125
// field should not be required.
125126
returnnewValueGuess(false, Guess::HIGH_CONFIDENCE);
126127
}
127128

128-
returnnewValueGuess(!$mapping['joinColumns'][0]['nullable'], Guess::HIGH_CONFIDENCE);
129+
returnnewValueGuess(!self::getMappingValue($mapping['joinColumns'][0],'nullable'), Guess::HIGH_CONFIDENCE);
129130
}
130131

131132
returnnull;
@@ -198,4 +199,13 @@ private static function getRealClass(string $class): string
198199

199200
returnsubstr($class,$pos + Proxy::MARKER_LENGTH +2);
200201
}
202+
203+
privatestaticfunctiongetMappingValue(array|JoinColumnMapping$mapping,string$key):mixed
204+
{
205+
if ($mappinginstanceof JoinColumnMapping) {
206+
return$mapping->$key;
207+
}
208+
209+
return$mapping[$key] ??null;
210+
}
201211
}

‎src/Symfony/Bridge/Doctrine/PropertyInfo/DoctrineExtractor.php‎

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
useDoctrine\ORM\EntityManagerInterface;
1717
useDoctrine\ORM\Mapping\AssociationMapping;
1818
useDoctrine\ORM\Mapping\ClassMetadata;
19+
useDoctrine\ORM\Mapping\EmbeddedClassMapping;
20+
useDoctrine\ORM\Mapping\FieldMapping;
21+
useDoctrine\ORM\Mapping\JoinColumnMapping;
1922
useDoctrine\ORM\Mapping\MappingExceptionasOrmMappingException;
2023
useDoctrine\Persistence\Mapping\MappingException;
2124
useSymfony\Component\PropertyInfo\PropertyAccessExtractorInterface;
@@ -88,20 +91,20 @@ public function getTypes(string $class, string $property, array $context = [])
8891
if ($metadatainstanceof ClassMetadata) {
8992
$associationMapping =$metadata->getAssociationMapping($property);
9093

91-
if (isset($associationMapping['indexBy'])) {
92-
$subMetadata =$this->entityManager->getClassMetadata($associationMapping['targetEntity']);
94+
if (self::getMappingValue($associationMapping,'indexBy')) {
95+
$subMetadata =$this->entityManager->getClassMetadata(self::getMappingValue($associationMapping,'targetEntity'));
9396

9497
// Check if indexBy value is a property
95-
$fieldName =$associationMapping['indexBy'];
98+
$fieldName =self::getMappingValue($associationMapping,'indexBy');
9699
if (null === ($typeOfField =$subMetadata->getTypeOfField($fieldName))) {
97-
$fieldName =$subMetadata->getFieldForColumn($associationMapping['indexBy']);
100+
$fieldName =$subMetadata->getFieldForColumn(self::getMappingValue($associationMapping,'indexBy'));
98101
// Not a property, maybe a column name?
99102
if (null === ($typeOfField =$subMetadata->getTypeOfField($fieldName))) {
100103
// Maybe the column name is the association join column?
101104
$associationMapping =$subMetadata->getAssociationMapping($fieldName);
102105

103106
$indexProperty =$subMetadata->getSingleAssociationReferencedJoinColumnName($fieldName);
104-
$subMetadata =$this->entityManager->getClassMetadata($associationMapping['targetEntity']);
107+
$subMetadata =$this->entityManager->getClassMetadata(self::getMappingValue($associationMapping,'targetEntity'));
105108

106109
// Not a property, maybe a column name?
107110
if (null === ($typeOfField =$subMetadata->getTypeOfField($indexProperty))) {
@@ -128,7 +131,7 @@ public function getTypes(string $class, string $property, array $context = [])
128131
}
129132

130133
if ($metadatainstanceof ClassMetadata &&isset($metadata->embeddedClasses[$property])) {
131-
return [newType(Type::BUILTIN_TYPE_OBJECT,false,$metadata->embeddedClasses[$property]['class'])];
134+
return [newType(Type::BUILTIN_TYPE_OBJECT,false,self::getMappingValue($metadata->embeddedClasses[$property],'class'))];
132135
}
133136

134137
if ($metadata->hasField($property)) {
@@ -140,7 +143,7 @@ public function getTypes(string $class, string $property, array $context = [])
140143

141144
$nullable =$metadatainstanceof ClassMetadata &&$metadata->isNullable($property);
142145
$enumType =null;
143-
if (null !==$enumClass =$metadata->getFieldMapping($property)['enumType'] ??null) {
146+
if (null !==$enumClass =self::getMappingValue($metadata->getFieldMapping($property),'enumType') ??null) {
144147
$enumType =newType(Type::BUILTIN_TYPE_OBJECT,$nullable,$enumClass);
145148
}
146149

@@ -236,17 +239,17 @@ private function getMetadata(string $class): ?ClassMetadata
236239
*/
237240
privatefunctionisAssociationNullable($associationMapping):bool
238241
{
239-
if (isset($associationMapping['id']) &&$associationMapping['id']) {
242+
if (self::getMappingValue($associationMapping,'id')) {
240243
returnfalse;
241244
}
242245

243-
if (!isset($associationMapping['joinColumns'])) {
246+
if (!self::getMappingValue($associationMapping,'joinColumns')) {
244247
returntrue;
245248
}
246249

247-
$joinColumns =$associationMapping['joinColumns'];
250+
$joinColumns =self::getMappingValue($associationMapping,'joinColumns');
248251
foreach ($joinColumnsas$joinColumn) {
249-
if (isset($joinColumn['nullable']) && !$joinColumn['nullable']) {
252+
if (false ===self::getMappingValue($joinColumn,'nullable')) {
250253
returnfalse;
251254
}
252255
}
@@ -302,4 +305,13 @@ private function getPhpType(string $doctrineType): ?string
302305

303306
returnnull;
304307
}
308+
309+
privatestaticfunctiongetMappingValue(array|AssociationMapping|EmbeddedClassMapping|FieldMapping|JoinColumnMapping$mapping,string$key):mixed
310+
{
311+
if ($mappinginstanceof AssociationMapping ||$mappinginstanceof EmbeddedClassMapping ||$mappinginstanceof FieldMapping ||$mappinginstanceof JoinColumnMapping) {
312+
return$mapping->$key;
313+
}
314+
315+
return$mapping[$key] ??null;
316+
}
305317
}

‎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
useDoctrine\ORM\EntityManagerInterface;
1515
useDoctrine\ORM\Mapping\ClassMetadataasOrmClassMetadata;
16+
useDoctrine\ORM\Mapping\FieldMapping;
1617
useDoctrine\ORM\Mapping\MappingExceptionasOrmMappingException;
1718
useDoctrine\Persistence\Mapping\MappingException;
1819
useSymfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
@@ -75,7 +76,7 @@ public function loadClassMetadata(ClassMetadata $metadata): bool
7576
foreach ($doctrineMetadata->fieldMappingsas$mapping) {
7677
$enabledForProperty =$enabledForClass;
7778
$lengthConstraint =null;
78-
foreach ($metadata->getPropertyMetadata($mapping['fieldName'])as$propertyMetadata) {
79+
foreach ($metadata->getPropertyMetadata(self::getFieldMappingValue($mapping,'fieldName'))as$propertyMetadata) {
7980
// Enabling or disabling auto-mapping explicitly always takes precedence
8081
if (AutoMappingStrategy::DISABLED ===$propertyMetadata->getAutoMappingStrategy()) {
8182
continue2;
@@ -95,26 +96,26 @@ public function loadClassMetadata(ClassMetadata $metadata): bool
9596
continue;
9697
}
9798

98-
if (true === ($mapping['unique'] ??false) && !isset($existingUniqueFields[$mapping['fieldName']])) {
99-
$metadata->addConstraint(newUniqueEntity(['fields' =>$mapping['fieldName']]));
99+
if (true === (self::getFieldMappingValue($mapping,'unique') ??false) && !isset($existingUniqueFields[self::getFieldMappingValue($mapping,'fieldName')])) {
100+
$metadata->addConstraint(newUniqueEntity(['fields' =>self::getFieldMappingValue($mapping,'fieldName')]));
100101
$loaded =true;
101102
}
102103

103-
if (null === ($mapping['length'] ??null) ||null !== ($mapping['enumType'] ??null) || !\in_array($mapping['type'], ['string','text'],true)) {
104+
if (null === (self::getFieldMappingValue($mapping,'length') ??null) ||null !== (self::getFieldMappingValue($mapping,'enumType') ??null) || !\in_array(self::getFieldMappingValue($mapping,'type'), ['string','text'],true)) {
104105
continue;
105106
}
106107

107108
if (null ===$lengthConstraint) {
108-
if (isset($mapping['originalClass']) && !str_contains($mapping['declaredField'],'.')) {
109-
$metadata->addPropertyConstraint($mapping['declaredField'],newValid());
109+
if (self::getFieldMappingValue($mapping,'originalClass') && !str_contains(self::getFieldMappingValue($mapping,'declaredField'),'.')) {
110+
$metadata->addPropertyConstraint(self::getFieldMappingValue($mapping,'declaredField'),newValid());
110111
$loaded =true;
111-
}elseif (property_exists($className,$mapping['fieldName']) && (!$doctrineMetadata->isMappedSuperclass ||$metadata->getReflectionClass()->getProperty($mapping['fieldName'])->isPrivate())) {
112-
$metadata->addPropertyConstraint($mapping['fieldName'],newLength(['max' =>$mapping['length']]));
112+
}elseif (property_exists($className,self::getFieldMappingValue($mapping,'fieldName')) && (!$doctrineMetadata->isMappedSuperclass ||$metadata->getReflectionClass()->getProperty(self::getFieldMappingValue($mapping,'fieldName'))->isPrivate())) {
113+
$metadata->addPropertyConstraint(self::getFieldMappingValue($mapping,'fieldName'),newLength(['max' =>self::getFieldMappingValue($mapping,'length')]));
113114
$loaded =true;
114115
}
115116
}elseif (null ===$lengthConstraint->max) {
116117
// If a Length constraint exists and no max length has been explicitly defined, set it
117-
$lengthConstraint->max =$mapping['length'];
118+
$lengthConstraint->max =self::getFieldMappingValue($mapping,'length');
118119
}
119120
}
120121

@@ -138,4 +139,13 @@ private function getExistingUniqueFields(ClassMetadata $metadata): array
138139

139140
return$fields;
140141
}
142+
143+
privatestaticfunctiongetFieldMappingValue(array|FieldMapping$mapping,string$key):mixed
144+
{
145+
if ($mappinginstanceof FieldMapping) {
146+
return$mapping->$key;
147+
}
148+
149+
return$mapping[$key] ??null;
150+
}
141151
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp