コメントの1つで尋ねられたように、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);
}
}
そして、あなたはこのコードをあなたの教義の構成に追加する必要があるだけです:
$entityManager->getConfiguration()->addCustomStringFunction('count_over', function ($name) use ($c) {
return new Example\Doctrine\CustomFunctions\CountOverSql($name);
});
そしてそれを使用するには、次のコードをselectステートメントに追加します。
$queryBuilder->select('table_name', 'count_over(table_name.id)');
それが誰かを助けることを願っています。