[英]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.