Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Doctrine2:PostgreSQL的年、月、日或日期格式_Postgresql_Doctrine Orm_Symfony4 - Fatal编程技术网

Doctrine2:PostgreSQL的年、月、日或日期格式

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

由于Doctrine2中既没有
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()
;