我跟着这个tuto:http://iksela.tumblr.com/post/4985265226/custom-dql-functions-nvl-convert-to-number。
但我仍然得到同样的错误:
SQLSTATE[42000]: Syntax error or access violation: 1305 FUNCTION my_project.TO_NUMBER does not exist
这是我的代码:
在My_project \ MyBundle \ DoctrineFunctions \ ToNumberFunction.php中:
namespace My_project\MyBundle\DoctrineFunctions;
use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
class ToNumberFunction extends FunctionNode {
public $field;
/**
* 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->field = $parser->StringPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
/**
* Get SQL
*
* @param \Doctrine\ORM\Query\SqlWalker $sqlWalker
*
* @return int
*/
public function getSql (\Doctrine\ORM\Query\SqlWalker $sqlWalker)
{
return 'TO_NUMBER('.$this->field->dispatch($sqlWalker).')';
}
}
在我的config.yml中,我有以下内容:
orm:
auto_generate_proxy_classes: %kernel.debug%
entity_managers:
default:
mappings:
..........
tree:
loggable:
.......
dql:
numeric_functions:
TO_NUMBER: My_project\MyBundle\DoctrineFunctions\ToNumberFunction
答案 0 :(得分:1)
试试这样:
orm:
auto_generate_proxy_classes: %kernel.debug%
entity_managers:
default:
mappings:
..........
tree:
loggable:
.......
dql:
numeric_functions:
TO_NUMBER: My_project\MyBundle\DoctrineFunctions\ToNumberFunction
或者像这样:
orm:
auto_generate_proxy_classes: %kernel.debug%
default_entity_manager: default
dql:
numeric_functions:
TO_NUMBER: My_project\MyBundle\DoctrineFunctions\ToNumberFunction
如果您没有多元化的实体经理,则无需声明:
default_entity_manager: default.
http://symfony.com/doc/current/cookbook/doctrine/custom_dql_functions.html
答案 1 :(得分:0)
看起来Doctrine代码工作正常,但TO_NUMBER不是您正在使用的数据库识别的功能。
TO_NUMBER似乎是Oracle SQL特定的函数,因此如果您使用的是另一个可能是您问题的SQL数据库。