16
16
use Doctrine \ORM \EntityManagerInterface ;
17
17
use Doctrine \ORM \Mapping \AssociationMapping ;
18
18
use Doctrine \ORM \Mapping \ClassMetadata ;
19
+ use Doctrine \ORM \Mapping \EmbeddedClassMapping ;
20
+ use Doctrine \ORM \Mapping \FieldMapping ;
21
+ use Doctrine \ORM \Mapping \JoinColumnMapping ;
19
22
use Doctrine \ORM \Mapping \MappingException as OrmMappingException ;
20
23
use Doctrine \Persistence \Mapping \MappingException ;
21
24
use Symfony \Component \PropertyInfo \PropertyAccessExtractorInterface ;
@@ -88,20 +91,20 @@ public function getTypes(string $class, string $property, array $context = [])
88
91
if ($ metadata instanceof ClassMetadata) {
89
92
$ associationMapping = $ metadata ->getAssociationMapping ($ property );
90
93
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 ' ) );
93
96
94
97
// Check if indexBy value is a property
95
- $ fieldName = $ associationMapping[ 'indexBy ' ] ;
98
+ $ fieldName = self :: getMappingValue ( $ associationMapping, 'indexBy ' ) ;
96
99
if (null === ($ typeOfField = $ subMetadata ->getTypeOfField ($ fieldName ))) {
97
- $ fieldName = $ subMetadata ->getFieldForColumn ($ associationMapping[ 'indexBy ' ] );
100
+ $ fieldName = $ subMetadata ->getFieldForColumn (self :: getMappingValue ( $ associationMapping, 'indexBy ' ) );
98
101
// Not a property, maybe a column name?
99
102
if (null === ($ typeOfField = $ subMetadata ->getTypeOfField ($ fieldName ))) {
100
103
// Maybe the column name is the association join column?
101
104
$ associationMapping = $ subMetadata ->getAssociationMapping ($ fieldName );
102
105
103
106
$ indexProperty = $ subMetadata ->getSingleAssociationReferencedJoinColumnName ($ fieldName );
104
- $ subMetadata = $ this ->entityManager ->getClassMetadata ($ associationMapping[ 'targetEntity ' ] );
107
+ $ subMetadata = $ this ->entityManager ->getClassMetadata (self :: getMappingValue ( $ associationMapping, 'targetEntity ' ) );
105
108
106
109
// Not a property, maybe a column name?
107
110
if (null === ($ typeOfField = $ subMetadata ->getTypeOfField ($ indexProperty ))) {
@@ -128,7 +131,7 @@ public function getTypes(string $class, string $property, array $context = [])
128
131
}
129
132
130
133
if ($ metadata instanceof ClassMetadata && isset ($ metadata ->embeddedClasses [$ property ])) {
131
- return [new Type (Type::BUILTIN_TYPE_OBJECT , false , $ metadata ->embeddedClasses [$ property ][ 'class ' ] )];
134
+ return [new Type (Type::BUILTIN_TYPE_OBJECT , false , self :: getMappingValue ( $ metadata ->embeddedClasses [$ property ], 'class ' ) )];
132
135
}
133
136
134
137
if ($ metadata ->hasField ($ property )) {
@@ -140,7 +143,7 @@ public function getTypes(string $class, string $property, array $context = [])
140
143
141
144
$ nullable = $ metadata instanceof ClassMetadata && $ metadata ->isNullable ($ property );
142
145
$ enumType = null ;
143
- if (null !== $ enumClass = $ metadata ->getFieldMapping ($ property )[ 'enumType ' ] ?? null ) {
146
+ if (null !== $ enumClass = self :: getMappingValue ( $ metadata ->getFieldMapping ($ property ), 'enumType ' ) ?? null ) {
144
147
$ enumType = new Type (Type::BUILTIN_TYPE_OBJECT , $ nullable , $ enumClass );
145
148
}
146
149
@@ -236,17 +239,17 @@ private function getMetadata(string $class): ?ClassMetadata
236
239
*/
237
240
private function isAssociationNullable ($ associationMapping ): bool
238
241
{
239
- if (isset ($ associationMapping[ ' id ' ]) && $ associationMapping [ 'id ' ] ) {
242
+ if (self :: getMappingValue ($ associationMapping, 'id ' ) ) {
240
243
return false ;
241
244
}
242
245
243
- if (!isset ($ associationMapping[ 'joinColumns ' ] )) {
246
+ if (!self :: getMappingValue ($ associationMapping, 'joinColumns ' )) {
244
247
return true ;
245
248
}
246
249
247
- $ joinColumns = $ associationMapping[ 'joinColumns ' ] ;
250
+ $ joinColumns = self :: getMappingValue ( $ associationMapping, 'joinColumns ' ) ;
248
251
foreach ($ joinColumns as $ joinColumn ) {
249
- if (isset ( $ joinColumn [ ' nullable ' ]) && ! $ joinColumn[ 'nullable ' ] ) {
252
+ if (false === self :: getMappingValue ( $ joinColumn, 'nullable ' ) ) {
250
253
return false ;
251
254
}
252
255
}
@@ -302,4 +305,13 @@ private function getPhpType(string $doctrineType): ?string
302
305
303
306
return null ;
304
307
}
308
+
309
+ private static function getMappingValue (array |AssociationMapping |EmbeddedClassMapping |FieldMapping |JoinColumnMapping $ mapping , string $ key ): mixed
310
+ {
311
+ if ($ mapping instanceof AssociationMapping || $ mapping instanceof EmbeddedClassMapping || $ mapping instanceof FieldMapping || $ mapping instanceof JoinColumnMapping) {
312
+ return $ mapping ->$ key ;
313
+ }
314
+
315
+ return $ mapping [$ key ] ?? null ;
316
+ }
305
317
}
0 commit comments