2013-08-25 49 views
0

我试图实施DQL自定义日期功能,这里有代码:定制DQL-功能

namespace SwingBy\SwingByBundle\DQL; 

use Doctrine\ORM\Query\Lexer; 
use Doctrine\ORM\Query\AST\Functions\FunctionNode; 

/** 
* Date ::= "DATE" "(" ArithmeticPrimary ")" 
*/ 

class Date extends FunctionNode { 

    public $dateTimeExpression = null; 

    public function parse(\Doctrine\ORM\Query\Parser $parser){ 

     $parser->match(Lexxer::T_IDENTIFIER); 
     $parser->match(Lexxer::T_OPEN_PARENTHESIS); 
     $this->dateTimeExpression = $parser->ArithmeticPrimary(); 
     $parser->match(Lexxer::T_CLOSE_PARENTHESIS); 
    } 

    public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker){ 

     return "DATE(" . $this->dateTimeExpression . ")"; 
    } 
} 

下面是config.yml的配置:

doctrine: 
    orm: 
     dql: 
      datetime_functions: 
       date: SwingBy\SwingByBundle\DQL\Date 

而这里的错误:

The autoloader expected class "SwingBy\SwingByBundle\DQL\Date" to be defined in file 
"/Applications/MAMP/htdocs/swingby_dev2.3/src/SwingBy/SwingByBundle/DQL/Date.php". The 
file was found but the class was not in it, the class name or namespace probably has a 
typo. 

我无法找到解决方案,我尝试了几个不同的命名空间,但没有任何工作。

Symfony的版本:2.3

+0

命名空间SwingBy \ SwingByBundle \ DQL; – Cerad

+0

aleady尝试过,仍然是相同的错误 –

+0

不太可能。错误消息很明显。确保你正在查看正确的文件。 – Cerad

回答

0

据商务部http://symfony.com/fr/doc/current/cookbook/doctrine/custom_dql_functions.html

doctrine: 
    orm: 
     entity_managers: 
      default: 
       dql: 
        datetime_functions: 
         date: SwingBy\SwingByBundle\DQL\Date 

和/或尝试添加一个反斜杠

date: \SwingBy\SwingByBundle\DQL\Date

+0

尽管它不会受到伤害,但如果您正在处理多个实体管理器,则只需要entity_manages级别。不,添加反斜杠既不需要也不会有帮助。系统知道Date需要加载并知道正确的文件。他只是有一个错字。问题中发布的内容可能并不代表实际日期文件中的内容。 – Cerad