2014-02-14 95 views
0

我跟隨此tuto:http://iksela.tumblr.com/post/4985265226/custom-dql-functions-nvl-convert-to-numberSymfony2 - 未找到自定義DQL功能

但我仍然得到同樣的錯誤:

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).')'; 
} 


} 

在我的配置。 yml,我有以下內容:

orm: 
    auto_generate_proxy_classes: %kernel.debug% 
    entity_managers: 
     default: 
      mappings: 
       .......... 
       tree: 
      loggable: 
        ....... 
     dql: 
      numeric_functions: 
       TO_NUMBER: My_project\MyBundle\DoctrineFunctions\ToNumberFunction 

回答

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 
如果你沒有multimple實體管理

不necesary聲明:

default_entity_manager: default. 

http://symfony.com/doc/current/cookbook/doctrine/custom_dql_functions.html

0

它看起來像教條代碼工作正常,但TO_NUM BER不是您正在使用的數據庫所識別的功能。

TO_NUMBER似乎是Oracle SQL特定功能,所以如果您使用的是不同的SQL數據庫,那可能是您的問題。

+0

你也許是對的!不幸的是,我不再編寫這個項目。客戶決定使用Wordpress ..對他感到羞恥。 無論如何,我認爲你是對的,對於下一個人,我建議在「get_sql」方法中使用CAST而不是TO_NUMBER。 對我而言: return'CAST('。$ this-> field-> dispatch($ sqlWalker)。'as UNSIGNED)'; – Delphine