Open
Description
It appears that getSingleScalarResult()
currently always returns bool|float|int|string|null
.
If I have the following query:
$result = $this->createQueryBuilder('u')
->select('COUNT(u.id)')
->where('u.is_deleted = false')
->getQuery()
->getSingleScalarResult();
\PHPStan\assertType($result, 'bool|float|int|string|null');
But when I do getResult()
it works properly:
$result = $this->createQueryBuilder('u')
->select('COUNT(u.id)')
->where('u.is_deleted = false')
->getQuery()
->getSingleScalarResult();
\PHPStan\assertType($result, 'list<array{1: int<0, max>}>');
I wonder why we cannot support getSingleScalarResult
? I created the following helper:
/**
* @template TValue of scalar
* @param list<array{1: TValue}> $results
*
* @return TValue
*/
protected function getSingleScalarResult(array $results) : bool | float | int | string
{
return $results[0][array_key_first($results[0])];
}
And now this works great:
$result = $this->getSingleScalarResult($this->createQueryBuilder('u')
->select('COUNT(u.id)')
->where('u.is_deleted = false')
->getQuery()
->getResult());
\PHPStan\assertType($result, 'int<0, max>');
Am I being naive here and is there a flaw with my solution or would it be possible to support it 😁?
/cc @arnaud-lb @janedbal
References:
Metadata
Assignees
Labels
No labels