我需要用doctrine执行像这样的查询
SELECT convert_currency(p.amount) FROM policy p
convert_currency 是我开发的库存程序,等待数字参数
我按照DQL步骤在CoreBundle / DQL上创建convertCurrency函数:
<?php
namespace DeltaRM\CoreBundle\DQL;
use \Doctrine\ORM\Query\AST\Functions\FunctionNode;
use \Doctrine\ORM\Query\Lexer;
class ConvertCurrency extends FunctionNode
{
public $value = null;
/**
* Parse DQL Function
*
* @param Parser $parser
*/
public function parse(\Doctrine\ORM\Query\Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->value = $parser->ArithmeticPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
/**
* Get SQL
*
* @param SqlWalker $sqlWalker
* @return string
*/
public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
{
return "convert_currency(" . $this->value->dispatch($sqlWalker) . ")";
}
并在我的config.yml上声明它
在存储库中,我使用此功能
$qBuilder = $this->getEntityManager()
->createQueryBuilder()
->select("convertCurrency (p.amount)")
->from("DeltaRMAssuranceBundle:Police", "p")
;
它完美地运行,生成的sql语句是
SELECT convert_currency(a0_.amount) AS sclr0 FROM police a0_
但是当doctrine执行它时我得到一个sql错误:
SQLSTATE[42883]: Undefined function: 7 ERROR: function convert_currency(numeric) does not exist
如果我直接在pgadmin上执行相同的sql,它可以工作,这个函数是众所周知的
如果我使用max而不是convert_currency执行完全相同的操作,它可以完美地运行。
我错过了什么?