From c94f43bd2f11c249c23b8830f54c28025468a08c Mon Sep 17 00:00:00 2001 From: Ondrej Mirtes Date: Fri, 17 Nov 2023 11:47:49 +0100 Subject: [PATCH] Fix QueryBuilder methods affecting result type with a denylist rather than allowlist --- ...lderGetQueryDynamicReturnTypeExtension.php | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/Type/Doctrine/QueryBuilder/QueryBuilderGetQueryDynamicReturnTypeExtension.php b/src/Type/Doctrine/QueryBuilder/QueryBuilderGetQueryDynamicReturnTypeExtension.php index 09571b5a..db2df49d 100644 --- a/src/Type/Doctrine/QueryBuilder/QueryBuilderGetQueryDynamicReturnTypeExtension.php +++ b/src/Type/Doctrine/QueryBuilder/QueryBuilderGetQueryDynamicReturnTypeExtension.php @@ -36,15 +36,20 @@ class QueryBuilderGetQueryDynamicReturnTypeExtension implements DynamicMethodRet * Those are critical methods where we need to understand arguments passed to them, the rest is allowed to be more dynamic * - this list reflects what is implemented in QueryResultTypeWalker */ - private const METHODS_AFFECTING_RESULT_TYPE = [ - 'add', - 'select', - 'addselect', - 'from', - 'join', - 'innerjoin', - 'leftjoin', - 'indexby', + private const METHODS_NOT_AFFECTING_RESULT_TYPE = [ + 'where', + 'andwhere', + 'orwhere', + 'setparameter', + 'setparameters', + 'addcriteria', + 'addorderby', + 'orderby', + 'addgroupby', + 'groupby', + 'having', + 'andhaving', + 'orhaving', ]; /** @var ObjectMetadataResolver */ @@ -154,7 +159,7 @@ public function getTypeFromMethodCall( try { $args = $this->argumentsProcessor->processArgs($scope, $methodName, $calledMethodCall->getArgs()); } catch (DynamicQueryBuilderArgumentException $e) { - if (!in_array($lowerMethodName, self::METHODS_AFFECTING_RESULT_TYPE, true)) { + if (in_array($lowerMethodName, self::METHODS_NOT_AFFECTING_RESULT_TYPE, true)) { continue; } return $defaultReturnType;