esempio dal documento di dottrina:
Il costrutto INDEX BY non si traduce direttamente in SQL ma influisce sull'idratazione dell'oggetto e dell'array. Dopo ogni clausola FROM e JOIN si specifica in base a quale campo questa classe deve essere indicizzata nel risultato. Per impostazione predefinita, un risultato viene incrementato da tasti numerici che iniziano con 0. Tuttavia con INDEX BY puoi specificare qualsiasi altra colonna come chiave del tuo risultato, ha davvero senso solo con campi primari o univoci però:
SELECT u.id, u.status, upper(u.name) nameUpper FROM User u INDEX BY u.id
JOIN u.phonenumbers p INDEX BY p.phonenumber
Restituisce un array del tipo seguente, indicizzato sia da user-id che da phonenumber-id:
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)