2012-08-03 28 views
11

Sé cómo usar "DISTINCT" en Doctrine 2, pero realmente necesito usar "DISTINCT ON (campo)" y no sé cómo hacer esto con QueryBuilder.Cómo usar "DISTINCT ON (campo)" en Doctrine 2?

Mi consulta SQL se parece a:

SELECT DISTINCT ON (currency) currency, amount FROM payments ORDER BY currency 

Y esta consulta funciona perfecto, pero no se puede utilizar con el Generador de consultas. ¿Tal vez podría escribir esta consulta de otra manera?

+0

No estoy familiarizado con la sintaxis "DISTINCT ON". ¿Es eso similar a GROUP BY? – Daniel

+1

@ Daniel: http://www.postgresql.org/docs/current/static/sql-select.html#SQL-DISTINCT –

+0

Usted puede leer este post: http://stackoverflow.com/ preguntas/23246939/ZF2-doctrina-2-objectselect-con-distinto-de-campo – gtzinos

Respuesta

2

Sugeriría que la construcción SELECT DISTINCT ON (..) que admite PostgreSQL está fuera del Modelo Relacional de Objetos (ORM) que es central para Doctrine. O, tal vez decirlo de otra manera, porque SELECT DISTINCT ON (..) es raro en las implementaciones SQL Doctrine no ha codificado para ello.

Independientemente de la lógica real para que no funcione, le sugiero que pruebe el "Native SQL" de Doctrine. Debe asignar los resultados de su consulta al ORM.

Con NativeQuery puede ejecutar sentencias SQL SELECT nativos y mapear los resultados a las entidades doctrina o cualquier otro formato resultado soportados por Doctrina.

Para hacer posible este mapeo, debe describir a Doctrine qué columnas en el mapa de resultados a qué propiedad de entidad. Esta descripción está representada por un objeto ResultSetMapping.

Con esta característica, puede asignar códigos SQL arbitrarios a objetos, como SQL altamente almacenados o procedimientos almacenados.

SELECT DISTINCT ON (..) cae en proveedor optimizado SQL Creo, por lo que usar NativeQuery debe permitirle el acceso a la misma.