2014-09-13 66 views
1

下面YEAR功能不工作的Symfony 2

$users = $this->getEntityManager() 
       ->createQuery("SELECT YEAR(u.dob) from AcmeDemoBundle:AppUsers u") 
       ->getResult(); 

不能在symfony的2 doctrine..My代碼使用YEAR()給出當運行該代碼,它顯示以下錯誤

[Syntax Error] line 0, col 7: Error: Expected known function, got 'YEAR'

爲什麼會發生這種情況?

回答

3

該原則中不存在此函數(以及許多其他用於管理日期時間元素)的映射。 您對使用DoctrineExtensions並添加以下映射到您的配置,

# Doctrine Configuration 
doctrine: 
    orm: 
     dql: 
      datetime_functions: 
       year: DoctrineExtensions\Query\Mysql\Year 

你也可以把它映射到你自己有一點點更多的工作的功能。

+0

謝謝ü你的答覆@ahmed ..there是關於原則擴展detaled介紹...無論如何,我會嘗試這種方式..謝謝 – 2014-09-13 11:51:55

0

添加自定義功能主義例如:

<?php 
namespace Project\CustomBundle\Dql; 

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

class YearFunction extends FunctionNode 
{ 
    private $arg; 

    public function getSql(SqlWalker $sqlWalker) 
    { 
     return sprintf('YEAR(%s)', $this->arg->dispatch($sqlWalker)); 
    } 

    public function parse(Parser $parser) 
    { 
     $parser->match(Lexer::T_IDENTIFIER); 
     $parser->match(Lexer::T_OPEN_PARENTHESIS); 

     $this->arg = $parser->ArithmeticPrimary(); 

     $parser->match(Lexer::T_CLOSE_PARENTHESIS); 
    } 
} 

在config.yml學說節

#config.yml 

doctrine: 
    orm: 
    ... 
    dql: 
     datetime_functions: 
     year: Project\CustomBundle\DqlYearFunction 
+0

我不知道DoctrineExtensions有年和其他功能,所以@Ahmed的答案是更準確的,但我將它作爲簡單方法的示例添加自定義函數到Doctrine – 2014-09-13 07:31:41

+0

謝謝你的支持swer @waldek_c ...我試過我們的代碼...但沒有顯示任何東西...無論如何,感謝你再次迴應你的迴應.. – 2014-09-13 11:42:55