Php 在Symfony2查询中执行日期函数

Php 在Symfony2查询中执行日期函数,php,mysql,symfony,doctrine-orm,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') ->whe

我想在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)

这个错误是由条令2引起的,它不理解mysql方法
date
,您应该手动创建它

我看到了解决方案

  • 使用以下代码创建名为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')


这将注册您的自定义条令方法

该错误是由条令2引起的,它不理解mysql方法
date
,您应该手动创建它

我看到了解决方案

  • 使用以下代码创建名为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')


这将注册您的自定义条令方法

您可以只使用sql函数日期()吗?我如何使用sql函数日期()?可能的重复项您可以只使用sql函数日期()吗?我如何使用sql函数日期()?可能重复的你能给我解决方案吗?因为我对symfony2完全不熟悉。如果我仍然遇到任何问题,我会尝试这个方法,然后我会让你知道我在哪里可以创建这个类。我建议在你的bundle
DoctrineCustomFunctions
DoctrineFunctions
中创建一个文件夹,然后放在那里,或者您可以使用Symfony 2 sugested方式,创建
DQL
文件夹并将它们放在那里,然后您可以通过在config.yml中配置它们使它们成为全局的。遵循链接这是Doctrine 2的工作方式,你能给我一个解决方案吗?因为我对symfony2完全不熟悉。如果我仍然遇到任何问题,我会尝试一下,然后我会让你知道我在哪里可以创建这个类。我建议在你的bundle
DoctrineCustomFunctions
DoctrineFunctions
中创建一个文件夹,然后放在那里,或者您可以使用Symfony 2 sugested方法,创建
DQL
文件夹并将它们放在那里,然后您可以通过在config.yml中配置它们使它们成为全局的。请遵循链接这是Doctrine 2的工作方式,无法帮到您更多