@@ -117,7 +117,9 @@ public function getTypes($class, $property, array $context = [])
117117 $ typeOfField = $ subMetadata ->getTypeOfField ($ indexProperty );
118118 }
119119
120- $ collectionKeyType = $ this ->getPhpType ($ typeOfField );
120+ if (!$ collectionKeyType = $ this ->getPhpType ($ typeOfField )) {
121+ return null ;
122+ }
121123 }
122124 }
123125
@@ -137,39 +139,46 @@ public function getTypes($class, $property, array $context = [])
137139
138140 if ($ metadata ->hasField ($ property )) {
139141 $ typeOfField = $ metadata ->getTypeOfField ($ property );
140- $ nullable = $ metadata instanceof ClassMetadataInfo && $ metadata ->isNullable ($ property );
141-
142- switch ($ typeOfField ) {
143- case DBALType::DATE :
144- case DBALType::DATETIME :
145- case DBALType::DATETIMETZ :
146- case 'vardatetime ' :
147- case DBALType::TIME :
148- return [new Type (Type::BUILTIN_TYPE_OBJECT , $ nullable , 'DateTime ' )];
149142
150- case 'date_immutable ' :
151- case 'datetime_immutable ' :
152- case 'datetimetz_immutable ' :
153- case 'time_immutable ' :
154- return [new Type (Type::BUILTIN_TYPE_OBJECT , $ nullable , 'DateTimeImmutable ' )];
155-
156- case 'dateinterval ' :
157- return [new Type (Type::BUILTIN_TYPE_OBJECT , $ nullable , 'DateInterval ' )];
158-
159- case DBALType::TARRAY :
160- return [new Type (Type::BUILTIN_TYPE_ARRAY , $ nullable , null , true )];
143+ if (!$ builtinType = $ this ->getPhpType ($ typeOfField )) {
144+ return null ;
145+ }
161146
162- case DBALType::SIMPLE_ARRAY :
163- return [new Type (Type::BUILTIN_TYPE_ARRAY , $ nullable , null , true , new Type (Type::BUILTIN_TYPE_INT ), new Type (Type::BUILTIN_TYPE_STRING ))];
147+ $ nullable = $ metadata instanceof ClassMetadataInfo && $ metadata ->isNullable ($ property );
164148
165- case DBALType::JSON_ARRAY :
166- return [new Type (Type::BUILTIN_TYPE_ARRAY , $ nullable , null , true )];
149+ switch ($ builtinType ) {
150+ case Type::BUILTIN_TYPE_OBJECT :
151+ switch ($ typeOfField ) {
152+ case DBALType::DATE :
153+ case DBALType::DATETIME :
154+ case DBALType::DATETIMETZ :
155+ case 'vardatetime ' :
156+ case DBALType::TIME :
157+ return [new Type (Type::BUILTIN_TYPE_OBJECT , $ nullable , 'DateTime ' )];
158+
159+ case 'date_immutable ' :
160+ case 'datetime_immutable ' :
161+ case 'datetimetz_immutable ' :
162+ case 'time_immutable ' :
163+ return [new Type (Type::BUILTIN_TYPE_OBJECT , $ nullable , 'DateTimeImmutable ' )];
164+
165+ case 'dateinterval ' :
166+ return [new Type (Type::BUILTIN_TYPE_OBJECT , $ nullable , 'DateInterval ' )];
167+ }
167168
168- default :
169- $ builtinType = $ this ->getPhpType ($ typeOfField );
169+ break ;
170+ case Type::BUILTIN_TYPE_ARRAY :
171+ switch ($ typeOfField ) {
172+ case DBALType::TARRAY :
173+ case DBALType::JSON_ARRAY :
174+ return [new Type (Type::BUILTIN_TYPE_ARRAY , $ nullable , null , true )];
170175
171- return $ builtinType ? [new Type ($ builtinType , $ nullable )] : null ;
176+ case DBALType::SIMPLE_ARRAY :
177+ return [new Type (Type::BUILTIN_TYPE_ARRAY , $ nullable , null , true , new Type (Type::BUILTIN_TYPE_INT ), new Type (Type::BUILTIN_TYPE_STRING ))];
178+ }
172179 }
180+
181+ return [new Type ($ builtinType , $ nullable )];
173182 }
174183
175184 return null ;
@@ -234,7 +243,22 @@ private function getPhpType($doctrineType)
234243 return Type::BUILTIN_TYPE_RESOURCE ;
235244
236245 case DBALType::OBJECT :
246+ case DBALType::DATE :
247+ case DBALType::DATETIME :
248+ case DBALType::DATETIMETZ :
249+ case 'vardatetime ' :
250+ case DBALType::TIME :
251+ case 'date_immutable ' :
252+ case 'datetime_immutable ' :
253+ case 'datetimetz_immutable ' :
254+ case 'time_immutable ' :
255+ case 'dateinterval ' :
237256 return Type::BUILTIN_TYPE_OBJECT ;
257+
258+ case DBALType::TARRAY :
259+ case DBALType::SIMPLE_ARRAY :
260+ case DBALType::JSON_ARRAY :
261+ return Type::BUILTIN_TYPE_ARRAY ;
238262 }
239263
240264 return null ;
0 commit comments