Menú

Juan Luis García Borrego

Programación, PHP, Symfony2, Silex y más cosillas.

Añadiendo funciones SQL nativas a DQL en Symfony

DQL (Doctrine Query Language) soporta un conjunto limitado de funciones SQL específicas entre los diferentes sistemas gestores de base de datos (MySQL, PostgreSQL, Oracle o SQLite).

Una vez definido un proveedor de base de datos en nuestro proyecto (que en ningún caso cambiará en el futuro) podemos hacer uso de todas las funciones nativas disponibles.

Este artículo, muestra como añadir la función nativa DATE() de MySQL a Doctrine en un proyecto Symfony.

La función Date() extrae solo la fecha de una expresión de fecha y hora.

Primero se crea un fichero en src\AppBundle\DQL\DatetimeFunction\Date.php

A continuación, le indicamos a Symfony app/config/config.yml las nuevas funciones DQL añadidas de la siguiente manera:

DQL tiene 3 tipos de funciones, los que devuelven un valor numérico, una cadena y una fecha.

Por último, en nuestra consulta DQL src\AppBundle\Repository\ArticleRepository.php ya tenemos disponible la funcionalidad añadida.

En este ejemplo, busco todas las fechas de tipo DateTime() de la entidad Article que sean iguales a fecha tipo Date() dada en la variable $now;

Recursos

Si te ha gustado éste artículo, te animo a compartirlo!😄

Articulo añadido a “A week of symfony”

Comentarios

Santiago dice:

Ayer mismo tuve esa necesidad y me estuve planteando si hacerlo a la vieja usanza (creo datetime(fecha+”0:0:0″) y datetime(fecha+”23:59:59″) y hacer un between) o hacer algo más “nativo” (por ejemplo, como lo que has hecho).
Al final, como soy tan “mijitas” opté por lo primero, por aquello de “abstracción total frente a la base de datos”.
Pero tienes toda la razón en lo que has dicho de que sabemos a priori que la base de datos no va a cambiar y, ¿porqué no hacer algo más “nativo” en estos casos?
Gracias por el artículo.

Gracias Santiago, me alegro que te sea útil.
Saludos

Deja un comentario