简体   繁体   English

自定义原则DQL功能

[英]Custom Doctrine DQL Function

I'm new to Symfony, so maybe my problem is very stupid but here it is : 我是Symfony的新手,所以也许我的问题很愚蠢,但这是:

I'm trying to define a custom doctrine DQL function but I can't get it work. 我试图定义一个自定义的DQL函数,但无法正常工作。

PHP 的PHP

namespace MsfBundle\AST\Functions;


use Doctrine\ORM\Query\Lexer;

class Geo extends \Doctrine\ORM\Query\AST\Functions\FunctionNode
{
    /**
     * @var \Doctrine\ORM\Query\AST\ComparisonExpression
     */
    private $latitude;
    /**
     * @var \Doctrine\ORM\Query\AST\ComparisonExpression
     */    
    private $longitude;

    /**
     * Parse DQL Function
     * 
     * @param \Doctrine\ORM\Query\Parser $parser 
     */
    public function parse(\Doctrine\ORM\Query\Parser $parser)
    {
        $parser->match(Lexer::T_IDENTIFIER);
        $parser->match(Lexer::T_OPEN_PARENTHESIS);
        $this->latitude = $parser->ComparisonExpression();
        $parser->match(Lexer::T_COMMA);
        $this->longitude = $parser->ComparisonExpression();
        $parser->match(Lexer::T_CLOSE_PARENTHESIS);
    }

    /**
     * Get SQL 
     * 
     * @param \Doctrine\ORM\Query\SqlWalker $sqlWalker
     * @return string
     */
    public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
    {

    return sprintf('(6366*acos(cos(radians(%s))*cos(radians(`%s`))*cos(radians(`%s`) -radians(%s))+sin(radians(%s))*sin(radians(`%s`))))',
    $this->latitude->leftExpression->dispatch($sqlWalker),
    $this->latitude->rightExpression->dispatch($sqlWalker),
    $this->longitude->rightExpression->dispatch($sqlWalker), 
    $this->longitude->leftExpression->dispatch($sqlWalker),
    $this->latitude->leftExpression->dispatch($sqlWalker),
    $this->latitude->rightExpression->dispatch($sqlWalker));
    }
}

config.yml 配置文件

doctrine:
#...
orm:
    auto_generate_proxy_classes: "%kernel.debug%"
    entity_managers:
        default:
            auto_mapping: true
            dql:
                numeric_functions:
                    geo :MsfBundle\AST\Functions\Geo

And here's what I get : 这就是我得到的:

Fatal error: Class 'MsfBundle\\AST\\Functions\\Geo' not found in /var/www/mcr/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php on line 3070 致命错误:在3070行的/var/www/mcr/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php中找不到类'MsfBundle \\ AST \\ Functions \\ Geo'

If you have any lead to help me get throught this, I'd really appreciate it. 如果您有任何帮助我解决这个问题的方法,我将不胜感激。

Thanks ! 谢谢 !

you are missing a backslash in geo :MsfBundle\\AST\\Functions\\Geo, should be geo :\\MsfBundle\\AST\\Functions\\Geo. 您在geo:MsfBundle \\ AST \\ Functions \\ Geo中缺少反斜线,应该是geo:\\ MsfBundle \\ AST \\ Functions \\ Geo。 Seems the class need an absolute reference. 似乎该类需要绝对引用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM