正如其中一条评论所要求的,我为 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)');
希望它可以帮助某人。