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:
It appears that
getSingleScalarResult()currently always returnsbool|float|int|string|null.If I have the following query:
But when I do
getResult()it works properly:I wonder why we cannot support
getSingleScalarResult? I created the following helper:And now this works great:
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: