mysql - Doctrine2 Symfony2 自定义函数解析器

标签 mysql sql function symfony doctrine-orm

我尝试添加我的自定义 sql 函数。

我的函数是这样的:

DISTANCE( 15.154454, 5.121444, -15.321111, 15.12111)

我添加了这个解析器来解析它:

use Doctrine\ORM\Query\Lexer;

class Distance extends \Doctrine\ORM\Query\AST\Functions\FunctionNode
{
    public $lat_a = null;
    public $lat_b = null;
    public $lon_a = null;
    public $lon_b = null;

    public function parse(\Doctrine\ORM\Query\Parser $parser)
    {
        $parser->match(Lexer::T_IDENTIFIER);
        $parser->match(Lexer::T_OPEN_PARENTHESIS);
        $this->lat_a = $parser->ArithmeticPrimary();
        $parser->match(Lexer::T_COMMA);
        $this->lon_a = $parser->ArithmeticPrimary();
        $parser->match(Lexer::T_COMMA);
        $this->lat_b = $parser->ArithmeticPrimary();
        $parser->match(Lexer::T_COMMA);
        $this->lon_b = $parser->ArithmeticPrimary();
        $parser->match(Lexer::T_CLOSE_PARENTHESIS);
    }

    public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
    {
        return 'DISTANCE(' .
        $this->lat_a->dispatch($sqlWalker) . ', ' .
        $this->lon_a->dispatch($sqlWalker) . ', ' .
        $this->lat_b->dispatch($sqlWalker) . ', ' .
        $this->lon_b->dispatch($sqlWalker) .
        ')';
    }
}

没关系,这个工作正常但是当我使用像“-15.321111”这样的负变量时,我得到一个错误 500... 使用正 var,一切正常。

谁能帮我解析负变量?

最佳答案

试试这个:

public function parse(\Doctrine\ORM\Query\Parser $parser)
{
    $parser->match(Lexer::T_IDENTIFIER);
    $parser->match(Lexer::T_OPEN_PARENTHESIS);
    $this->lat_a = $parser->ArithmeticExpression();
    $parser->match(Lexer::T_COMMA);
    $this->lon_a = $parser->ArithmeticExpression();
    $parser->match(Lexer::T_COMMA);
    $this->lat_b = $parser->ArithmeticExpression();
    $parser->match(Lexer::T_COMMA);
    $this->lon_b = $parser->ArithmeticExpression();
    $parser->match(Lexer::T_CLOSE_PARENTHESIS);
}

public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
{
    return 'DISTANCE(' .
    $sqlWalker->walkArithmeticExpression($this->lat_a) . ', ' .
    $sqlWalker->walkArithmeticExpression($this->lon_a) . ', ' .
    $sqlWalker->walkArithmeticExpression($this->lat_b) . ', ' .
    $sqlWalker->walkArithmeticExpression($this->lon_b) .
    ')';
}

关于mysql - Doctrine2 Symfony2 自定义函数解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21663005/

相关文章:

mysql - 连接 2 个表的值并显示数据

asp.net - 没有用户名和密码的连接字符串,asp.net

c - 具有不同语义的函数调用

mysql - 返回查询结果的相关记录数

mysql - 单击提交按钮时提交 $_GET 变量

php - 通过 PHP 跨服务器复制 MySQL 结构

MySQL group_concat 和 concat 姓氏、姓氏和头衔

sql - 在 SQL Server 中创建一个简单的选择函数

javascript - 有没有办法在 JS 函数类中使用属​​性获取和设置符号?

C++ const 函数错误