Doctrine2:PostgreSQL的年、月、日或日期格式
由于Doctrine2中既没有Doctrine2:PostgreSQL的年、月、日或日期格式,postgresql,doctrine-orm,symfony4,Postgresql,Doctrine Orm,Symfony4,由于Doctrine2中既没有DAY()、MONTH()、YEAR(),也没有DATE\u FORMAT(),因此在使用PostgreSQL数据库时,如何在Query Builder中使用这些函数之一 我找到了几个教程,但它们都适用于MySQL,没有一个适用于PostgreSQL。由于数据库供应商之间的SQL语法不同,因此不可能(或至少不那么容易)创建独立于供应商的解决方案。这是PostgreSQL的一种方法 我们将要使用的SQL函数是to_char(),请参阅 首先,我们需要创建一个自定义DQ
DAY()
、MONTH()
、YEAR()
,也没有DATE\u FORMAT()
,因此在使用PostgreSQL数据库时,如何在Query Builder中使用这些函数之一
我找到了几个教程,但它们都适用于MySQL,没有一个适用于PostgreSQL。由于数据库供应商之间的SQL语法不同,因此不可能(或至少不那么容易)创建独立于供应商的解决方案。这是PostgreSQL的一种方法 我们将要使用的SQL函数是
to_char()
,请参阅
首先,我们需要创建一个自定义DQL函数,请参见
然后我们在Symfony 4中注册它,参见
现在,我们可以在任何存储库中使用它:
return $this->createQueryBuilder('a')
->select("to_char(a.timestamp, 'YYYY') AS year")
->groupBy('year')
->orderBy('year', 'ASC')
->getQuery()
->getResult()
;
您是否可以将时间戳提取到php对象中,并使用php的(尽管较差)时间戳操作工具来实现您的目标?当然可以在php中实现。但是在这种情况下,不能使用
->groupBy('year')
(参见下面的示例)。
# config/packages/doctrine.yaml
doctrine:
orm:
dql:
string_functions:
to_char: App\DQL\ToChar
return $this->createQueryBuilder('a')
->select("to_char(a.timestamp, 'YYYY') AS year")
->groupBy('year')
->orderBy('year', 'ASC')
->getQuery()
->getResult()
;