Doctrine 2, uso de campos ocultos

doctrine.jpg
23
Ago 17

Seguro que en alguna ocasión os habéis encontrado con la necesidad de utilizar una operación en la cláusula “ORDER BY” de una consulta DQL.

Imaginemos que necesitamos ordenar un usuario por sus apellidos y nombre. Se nos puede ocurrir la siguiente consulta DQL:

SELECT u FROM AppBundle:User u ORDER BY CONCAT(u.surname, u.name)

Esta declaración no es posible en Doctrine 2. En DQL no podemos realizar una operación en la cláusula ORDER BY.

Para solucionar este problema podemos utilizar el campo HIDDEN. Lo que tenemos que hacer, es declarar en la cláusula SELECT un campo con la operación que necesitamos y marcarlo como oculto para que el ORM lo ignore en la hidratación. Veamos un ejemplo:

SELECT     u,     CONCAT(u.surname, u.name) AS HIDDEN fullname FROM AppBundle:User u ORDER BY fullname

De esta forma tendremos disponible un campo por el que ordenar directamente por el resultado de una operación.

Espero que sea util :)