@@ -152,17 +152,18 @@ public function getTypes($class, $property, array $context = [])
152
152
}
153
153
154
154
if ($ metadata ->hasField ($ property )) {
155
- $ nullable = $ metadata instanceof ClassMetadataInfo && $ metadata ->isNullable ($ property );
156
- if (null !== $ enumClass = $ metadata ->getFieldMapping ($ property )['enumType ' ] ?? null ) {
157
- return [new Type (Type::BUILTIN_TYPE_OBJECT , $ nullable , $ enumClass )];
158
- }
159
-
160
155
$ typeOfField = $ metadata ->getTypeOfField ($ property );
161
156
162
157
if (!$ builtinType = $ this ->getPhpType ($ typeOfField )) {
163
158
return null ;
164
159
}
165
160
161
+ $ nullable = $ metadata instanceof ClassMetadataInfo && $ metadata ->isNullable ($ property );
162
+ $ enumType = null ;
163
+ if (null !== $ enumClass = $ metadata ->getFieldMapping ($ property )['enumType ' ] ?? null ) {
164
+ $ enumType = new Type (Type::BUILTIN_TYPE_OBJECT , $ nullable , $ enumClass );
165
+ }
166
+
166
167
switch ($ builtinType ) {
167
168
case Type::BUILTIN_TYPE_OBJECT :
168
169
switch ($ typeOfField ) {
@@ -192,11 +193,22 @@ public function getTypes($class, $property, array $context = [])
192
193
case self ::$ useDeprecatedConstants ? DBALType::TARRAY : Types::ARRAY :
193
194
// no break
194
195
case 'json_array ' :
196
+ // return null if $enumType is set, because we can't determine if collectionKeyType is string or int
197
+ if ($ enumType ) {
198
+ return null ;
199
+ }
200
+
195
201
return [new Type (Type::BUILTIN_TYPE_ARRAY , $ nullable , null , true )];
196
202
197
203
case self ::$ useDeprecatedConstants ? DBALType::SIMPLE_ARRAY : Types::SIMPLE_ARRAY :
198
- return [new Type (Type::BUILTIN_TYPE_ARRAY , $ nullable , null , true , new Type (Type::BUILTIN_TYPE_INT ), new Type (Type::BUILTIN_TYPE_STRING ))];
204
+ return [new Type (Type::BUILTIN_TYPE_ARRAY , $ nullable , null , true , new Type (Type::BUILTIN_TYPE_INT ), $ enumType ?? new Type (Type::BUILTIN_TYPE_STRING ))];
205
+ }
206
+ case Type::BUILTIN_TYPE_INT :
207
+ case Type::BUILTIN_TYPE_STRING :
208
+ if ($ enumType !== null ) {
209
+ return [$ enumType ];
199
210
}
211
+ // no break
200
212
}
201
213
202
214
return [new Type ($ builtinType , $ nullable )];
0 commit comments