1616use Doctrine \ORM \EntityManagerInterface ;
1717use Doctrine \ORM \Mapping \AssociationMapping ;
1818use Doctrine \ORM \Mapping \ClassMetadata ;
19+ use Doctrine \ORM \Mapping \EmbeddedClassMapping ;
20+ use Doctrine \ORM \Mapping \FieldMapping ;
21+ use Doctrine \ORM \Mapping \JoinColumnMapping ;
1922use Doctrine \ORM \Mapping \MappingException as OrmMappingException ;
2023use Doctrine \Persistence \Mapping \MappingException ;
2124use Symfony \Component \PropertyInfo \PropertyAccessExtractorInterface ;
@@ -78,20 +81,20 @@ public function getTypes(string $class, string $property, array $context = []):
7881 if ($ metadata instanceof ClassMetadata) {
7982 $ associationMapping = $ metadata ->getAssociationMapping ($ property );
8083
81- if (isset ($ associationMapping[ 'indexBy ' ] )) {
82- $ subMetadata = $ this ->entityManager ->getClassMetadata ($ associationMapping[ 'targetEntity ' ] );
84+ if (self :: getMappingValue ($ associationMapping, 'indexBy ' )) {
85+ $ subMetadata = $ this ->entityManager ->getClassMetadata (self :: getMappingValue ( $ associationMapping, 'targetEntity ' ) );
8386
8487 // Check if indexBy value is a property
85- $ fieldName = $ associationMapping[ 'indexBy ' ] ;
88+ $ fieldName = self :: getMappingValue ( $ associationMapping, 'indexBy ' ) ;
8689 if (null === ($ typeOfField = $ subMetadata ->getTypeOfField ($ fieldName ))) {
87- $ fieldName = $ subMetadata ->getFieldForColumn ($ associationMapping[ 'indexBy ' ] );
90+ $ fieldName = $ subMetadata ->getFieldForColumn (self :: getMappingValue ( $ associationMapping, 'indexBy ' ) );
8891 // Not a property, maybe a column name?
8992 if (null === ($ typeOfField = $ subMetadata ->getTypeOfField ($ fieldName ))) {
9093 // Maybe the column name is the association join column?
9194 $ associationMapping = $ subMetadata ->getAssociationMapping ($ fieldName );
9295
9396 $ indexProperty = $ subMetadata ->getSingleAssociationReferencedJoinColumnName ($ fieldName );
94- $ subMetadata = $ this ->entityManager ->getClassMetadata ($ associationMapping[ 'targetEntity ' ] );
97+ $ subMetadata = $ this ->entityManager ->getClassMetadata (self :: getMappingValue ( $ associationMapping, 'targetEntity ' ) );
9598
9699 // Not a property, maybe a column name?
97100 if (null === ($ typeOfField = $ subMetadata ->getTypeOfField ($ indexProperty ))) {
@@ -118,7 +121,7 @@ public function getTypes(string $class, string $property, array $context = []):
118121 }
119122
120123 if ($ metadata instanceof ClassMetadata && isset ($ metadata ->embeddedClasses [$ property ])) {
121- return [new Type (Type::BUILTIN_TYPE_OBJECT , false , $ metadata ->embeddedClasses [$ property ][ 'class ' ] )];
124+ return [new Type (Type::BUILTIN_TYPE_OBJECT , false , self :: getMappingValue ( $ metadata ->embeddedClasses [$ property ], 'class ' ) )];
122125 }
123126
124127 if ($ metadata ->hasField ($ property )) {
@@ -130,7 +133,7 @@ public function getTypes(string $class, string $property, array $context = []):
130133
131134 $ nullable = $ metadata instanceof ClassMetadata && $ metadata ->isNullable ($ property );
132135 $ enumType = null ;
133- if (null !== $ enumClass = $ metadata ->getFieldMapping ($ property )[ 'enumType ' ] ?? null ) {
136+ if (null !== $ enumClass = self :: getMappingValue ( $ metadata ->getFieldMapping ($ property ), 'enumType ' ) ?? null ) {
134137 $ enumType = new Type (Type::BUILTIN_TYPE_OBJECT , $ nullable , $ enumClass );
135138 }
136139
@@ -220,17 +223,17 @@ private function getMetadata(string $class): ?ClassMetadata
220223 */
221224 private function isAssociationNullable (array |AssociationMapping $ associationMapping ): bool
222225 {
223- if (isset ($ associationMapping[ ' id ' ]) && $ associationMapping [ 'id ' ] ) {
226+ if (self :: getMappingValue ($ associationMapping, 'id ' ) ) {
224227 return false ;
225228 }
226229
227- if (!isset ($ associationMapping[ 'joinColumns ' ] )) {
230+ if (!self :: getMappingValue ($ associationMapping, 'joinColumns ' )) {
228231 return true ;
229232 }
230233
231- $ joinColumns = $ associationMapping[ 'joinColumns ' ] ;
234+ $ joinColumns = self :: getMappingValue ( $ associationMapping, 'joinColumns ' ) ;
232235 foreach ($ joinColumns as $ joinColumn ) {
233- if (isset ( $ joinColumn [ ' nullable ' ]) && ! $ joinColumn[ 'nullable ' ] ) {
236+ if (false === self :: getMappingValue ( $ joinColumn, 'nullable ' ) ) {
234237 return false ;
235238 }
236239 }
@@ -272,4 +275,13 @@ private function getPhpType(string $doctrineType): ?string
272275 default => null ,
273276 };
274277 }
278+
279+ private static function getMappingValue (array |AssociationMapping |EmbeddedClassMapping |FieldMapping |JoinColumnMapping $ mapping , string $ key ): mixed
280+ {
281+ if ($ mapping instanceof AssociationMapping || $ mapping instanceof EmbeddedClassMapping || $ mapping instanceof FieldMapping || $ mapping instanceof JoinColumnMapping) {
282+ return $ mapping ->$ key ;
283+ }
284+
285+ return $ mapping [$ key ] ?? null ;
286+ }
275287}
0 commit comments