2017-09-22 124 views
2

我需要获取所有Ad实例的日期等于特定日期。问题是ad.date字段是日期时间,所以如何比较两个日期?如何将日期和日期时间与原则进行比较

我已经试过这样:

$result = $query_builder 
      ->select("ad") 
      ->where("DATE(ad.date) = :date") 
      ->setParameter("date", $some_date) 
      ->getQuery() 
      ->getResult(); 

但异常被抛出:

[Syntax Error] line 0, col 50: Error: Expected known function, got 'DATE' 

我也想过建立一个虚拟的财产,但没有奏效。

回答

1

在你的情况下,原则包含“DATE()”是未知函数。你需要告诉Doctrine这个函数是可以的。这个问题已被讨论here。基本上你需要使用DoctrineExtensions。 要安装它使用命令:

composer require beberlei/DoctrineExtensions 

然后添加到您的config.yml:如果你只想要一天,或仅一个月,或者比较

doctrine: 
    orm: 
     dql: 
      string_functions: 
       DATE: DoctrineExtensions\Query\Mysql\Date 
0

...你可以在config.yml文件补充一点:

orm: 
    auto_generate_proxy_classes: '%kernel.debug%' 
    naming_strategy: doctrine.orm.naming_strategy.underscore 
    auto_mapping: true 
    dql: 
     datetime_functions: 
      DAY: DoctrineExtensions\Query\Mysql\Day 
      MONTH: DoctrineExtensions\Query\Mysql\Month 
      YEAR: DoctrineExtensions\Query\Mysql\Year 
      DATE: DoctrineExtensions\Query\Mysql\Date 
      HOUR: DoctrineExtensions\Query\Mysql\Hour 
      MINUTE: DoctrineExtensions\Query\Mysql\Minute 
      SECOND: DoctrineExtensions\Query\Mysql\Second 

那么你可以使用它像:

->where('YEAR(associationname.thedatefield) > YEAR(:anotherdate)') 

beberlei/DoctrineExtensions