我是 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));
}
}
配置.yml
doctrine:
#...
orm:
auto_generate_proxy_classes: "%kernel.debug%"
entity_managers:
default:
auto_mapping: true
dql:
numeric_functions:
geo :MsfBundle\AST\Functions\Geo
这就是我得到的:
致命错误:在第 3070 行的 /var/www/mcr/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php 中找不到类 'MsfBundle\AST\Functions\Geo'
如果您有任何线索可以帮助我解决这个问题,我将不胜感激。
谢谢 !