diff --git a/src/Type/Doctrine/Query/QueryResultDynamicReturnTypeExtension.php b/src/Type/Doctrine/Query/QueryResultDynamicReturnTypeExtension.php index 7d047768..e7357b35 100644 --- a/src/Type/Doctrine/Query/QueryResultDynamicReturnTypeExtension.php +++ b/src/Type/Doctrine/Query/QueryResultDynamicReturnTypeExtension.php @@ -199,14 +199,9 @@ static function (Type $type, callable $traverse) use ($objectManager): Type { return new MixedType(); } - if (!$objectManager->getMetadataFactory()->hasMetadataFor($type->getClassName())) { - return $traverse($type); - } - - // We could return `new ArrayTyp(new MixedType(), new MixedType())` - // but the lack of precision in the array keys/values would give false positive - // @see https://github.com/phpstan/phpstan-doctrine/pull/412#issuecomment-1497092934 - return new MixedType(); + return $objectManager->getMetadataFactory()->hasMetadataFor($type->getClassName()) + ? new ArrayType(new MixedType(), new MixedType()) + : $traverse($type); } ); } diff --git a/tests/Type/Doctrine/data/QueryResult/queryResult.php b/tests/Type/Doctrine/data/QueryResult/queryResult.php index d8681e76..61ed83d1 100644 --- a/tests/Type/Doctrine/data/QueryResult/queryResult.php +++ b/tests/Type/Doctrine/data/QueryResult/queryResult.php @@ -155,35 +155,35 @@ public function testReturnTypeOfQueryMethodsWithExplicitArrayHydrationMode(Entit '); assertType( - 'list', + 'list', $query->getResult(AbstractQuery::HYDRATE_ARRAY) ); assertType( - 'list', + 'list', $query->getArrayResult() ); assertType( - 'iterable', + 'iterable', $query->toIterable([], AbstractQuery::HYDRATE_ARRAY) ); assertType( - 'list', + 'list', $query->execute(null, AbstractQuery::HYDRATE_ARRAY) ); assertType( - 'list', + 'list', $query->executeIgnoreQueryCache(null, AbstractQuery::HYDRATE_ARRAY) ); assertType( - 'list', + 'list', $query->executeUsingQueryCache(null, AbstractQuery::HYDRATE_ARRAY) ); assertType( - 'mixed', + 'array', $query->getSingleResult(AbstractQuery::HYDRATE_ARRAY) ); assertType( - 'mixed', + 'array|null', $query->getOneOrNullResult(AbstractQuery::HYDRATE_ARRAY) );