@@ -152,17 +152,18 @@ public function getTypes($class, $property, array $context = [])
152152 }
153153
154154 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-
160155 $ typeOfField = $ metadata ->getTypeOfField ($ property );
161156
162157 if (!$ builtinType = $ this ->getPhpType ($ typeOfField )) {
163158 return null ;
164159 }
165160
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+
166167 switch ($ builtinType ) {
167168 case Type::BUILTIN_TYPE_OBJECT :
168169 switch ($ typeOfField ) {
@@ -192,11 +193,22 @@ public function getTypes($class, $property, array $context = [])
192193 case self ::$ useDeprecatedConstants ? DBALType::TARRAY : Types::ARRAY :
193194 // no break
194195 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+
195201 return [new Type (Type::BUILTIN_TYPE_ARRAY , $ nullable , null , true )];
196202
197203 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 ];
199210 }
211+ // no break
200212 }
201213
202214 return [new Type ($ builtinType , $ nullable )];
0 commit comments