如何将日期和日期时间与原则进行比较
问题描述:
我需要获取所有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'
我也想过建立一个虚拟的财产,但没有奏效。
答
在你的情况下,原则包含“DATE()”是未知函数。你需要告诉Doctrine这个函数是可以的。这个问题已被讨论here。基本上你需要使用DoctrineExtensions。 要安装它使用命令:
composer require beberlei/DoctrineExtensions
然后添加到您的config.yml:如果你只想要一天,或仅一个月,或者比较
doctrine:
orm:
dql:
string_functions:
DATE: DoctrineExtensions\Query\Mysql\Date
答
...你可以在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)')