Hemos creado una librería para Doctrine que contiene funciones típicas de PostgreSQL para ser utilizadas en DQL.
La librería se encuentra en nuestro
GitHub . Además al librería es fácilmente integrable con un proyecto Symfony a través de su configuración.
A continuación vamos a ver como podríamos consultar el año de un campo timestamp de PostgreSQL con DQL y esta libreria.
Primero necesitamos instalar el paquete a través de composer:
composer require gesdinet/doctrine-functions-psql
Si no tenemos composer en nuestro proyecto PHP, podremos descargarla directamente de GitHub en este
enlce.
Una vez instalada la librería nos aseguramos que se encuentra en la carpeta vendor/gesdinet.
Tenemos dos opciones para utilizarla:
1) Doctrine
Instanciamos con el siguiente código la función
<?php
$config = new \Doctrine\ORM\Configuration();
$config->addCustomDatetimeFunction('year', 'Gesdinet\DQL\Datetime\Year');
$em = EntityManager::create($dbParams, $config);
2) Symfony
Modificamos el fichero config.yml para añadir la ruta a la libreria
doctrine:
orm:
dql:
datetime_functions:
month: Gesdinet\DQL\Datetime\Month
year: Gesdinet\DQL\Datetime\Year