在Symfony2查询中执行日期函数

时间:2015-03-03 07:54:55

标签: php mysql symfony doctrine-orm

我想在Symfony2查询中执行date()函数,下面是我尝试过的但是它给了我一个错误。

$query=$em->createQueryBuilder()
           ->select('date(a.created_at), COUNT(date( a.created_at) ) AS        count_user')
           ->from('ContrateAdminBundle:Artist', 'a')
           ->where("date(a.created_at) BETWEEN '{$fromdateCelebrities}' AND '{$todateCelebrities}'")
           ->groupBy('date(a.created_at)')
           ->getQuery();

我还粘贴了查询的输出字符串,我可以直接在MySQL中执行该字符串。

select date(created_at) created_at, count(*) from Artist where date(created_at) BETWEEN '2015-01-05' AND '2015-02-25' group by date(created_at)

1 个答案:

答案 0 :(得分:4)

错误是由学说2引起的,它不了解mysql方法date,你应该手动创建它。

我在Create custom Doctrine 2 Method

上看到了sollution alredy
  • 使用以下代码创建名为DateFunction.php的php类:

    use Doctrine\ORM\Query\AST\Functions\FunctionNode;
    use Doctrine\ORM\Query\Lexer;
    use Doctrine\ORM\Query\SqlWalker;
    use Doctrine\ORM\Query\Parser;
    
    class DateFunction extends FunctionNode
    {
        private $arg;
    
        public function getSql(SqlWalker $sqlWalker)
        {
            return sprintf('DATE(%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);
        }
    }
    
  • $em注册新方法

    后,在您的控制器或存储库中

    $em->getConfiguration()->addCustomDatetimeFunction('DATE', 'DateFunction');

这将注册您的自定义学说方法;