2

私はSymfonyが初めてなので、私の問題は非常にばかげているかもしれませんが、ここにあります:

カスタム教義 DQL 関数を定義しようとしていますが、うまくいきません。

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

そして、ここに私が得るものがあります:

致命的なエラー: Class 'MsfBundle\AST\Functions\Geo' not found in /var/www/mcr/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php 行 3070

これを乗り越えるための手がかりがあれば、本当に感謝しています。

ありがとう !

4

1 に答える 1

0

geo :MsfBundle\AST\Functions\Geo にバックスラッシュがありません。geo :\MsfBundle\AST\Functions\Geo である必要があります。クラスには絶対参照が必要なようです。

于 2012-11-26T17:29:28.113 に答える