As asked in one of the comments, I attach my custom string function for COUNT() OVER()
<?php
namespace Example\Doctrine\CustomFunctions;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
use Doctrine\ORM\Query\Lexer;
/**
* Class CountOverSql
*/
class CountOverSql extends FunctionNode
{
/**
* @var string
*/
private $field;
public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
{
return "COUNT(".$this->field->dispatch($sqlWalker).") OVER()";
}
public function parse(\Doctrine\ORM\Query\Parser $parser): void
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->field = $parser->StringPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
}
and you only need to add this code to your doctrine configuration:
$entityManager->getConfiguration()->addCustomStringFunction('count_over', function ($name) use ($c) {
return new Example\Doctrine\CustomFunctions\CountOverSql($name);
});
And to use it, add this code to your select statement:
$queryBuilder->select('table_name', 'count_over(table_name.id)');
Hope it helps someone.