2012-08-03 12 views
11

Wiem, jak używać "DISTINCT" w Doctrine 2, ale naprawdę potrzebuję użyć "DISTINCT ON (field)" i nie wiem jak to zrobić z QueryBuilder.Jak korzystać z "DISTINCT ON (field)" w Doctrine 2?

Moje zapytanie SQL wygląda następująco:

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

I to kwerenda działa idealnie, ale nie można go używać z QueryBuilder. Może mógłbym napisać to zapytanie w inny sposób?

+0

Nie znam składni "DISTINCT ON". Czy to jest podobne do GROUP BY? – Daniel

+1

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

+0

Można przeczytać ten post: http://stackoverflow.com/ pytania/23246939/ZF2-nauka-2-objectselect-z-wyraźna na polu – gtzinos

Odpowiedz

2

Sugerowałbym, że SELECT DISTINCT ON (..) konstrukt że PostgreSQL jest poza obiektem modelu relacyjnego (ORM), która jest centralnym Nauki. Lub, być może, umieścić inaczej, ponieważ SELECT DISTINCT ON (..) jest rzadkością w implementacjach SQL Doctrine nie zakodowało dla niego.

Bez względu na faktyczną logikę, która nie działa, sugeruję wypróbowanie "Native SQL" Doctrine'a. Musisz zmapować wyniki zapytania do ORM.

Z NativeQuery można wykonać rodzimych oświadczenia SELECT SQL i map wyniki dla podmiotów doktrynę czy jakiegokolwiek innego formatu wynikowego obsługiwane przez Nauki.

Aby to mapowanie było możliwe, musisz opisać w dokumencie Doctrine, jakie kolumny na mapie wyników, do której własności obiektu. Ten opis jest reprezentowany przez obiekt ResultSetMapping.

Za pomocą tej funkcji można mapować dowolny kod SQL do obiektów, takich jak: SQL Server zoptymalizowany pod kątem dostawców lub procedury przechowywane.

SELECT DISTINCT ON (..) wpada sprzedawca zoptymalizowany SQL myślę, więc korzystanie NativeQuery powinny umożliwić do niego dostęp.