Doctrine2 DQL和库存程序问题

时间:2014-08-28 09:59:56

标签: postgresql symfony doctrine-orm

我需要用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执行完全相同的操作,它可以完美地运行。

我错过了什么?

0 个答案:

没有答案