przykład z dokumentu doktryny:
Konstrukcja INDEX BY nie jest niczym, co bezpośrednio przekłada się na SQL, ale wpływa na hydratację obiektów i tablic. Po każdej klauzuli FROM i JOIN określasz, według którego pola ta klasa powinna być indeksowana w wyniku. Domyślnie wynik jest zwiększany za pomocą klawiszy numerycznych rozpoczynających się od 0. Jednak w przypadku INDEX BY możesz określić dowolną inną kolumnę jako klucz wyniku, ma to jednak sens tylko w przypadku pól podstawowych lub unikalnych:
SELECT u.id, u.status, upper(u.name) nameUpper FROM User u INDEX BY u.id
JOIN u.phonenumbers p INDEX BY p.phonenumber
Zwraca tablicę następującego rodzaju, indeksowaną zarówno przez identyfikator użytkownika, jak i identyfikator numeru telefonu:
array
0 =>
array
1 =>
object(stdClass)[299]
public '__CLASS__' => string 'Doctrine\Tests\Models\CMS\CmsUser' (length=33)
public 'id' => int 1
..
'nameUpper' => string 'ROMANB' (length=6)
1 =>
array
2 =>
object(stdClass)[298]
public '__CLASS__' => string 'Doctrine\Tests\Models\CMS\CmsUser' (length=33)
public 'id' => int 2
...
'nameUpper' => string 'JWAGE' (length=5)