Indexer les résultats de vos requêtes Doctrine

Lorsque vous faites une requête avec Doctrine, les résultats sont retournés sous forme d'un tableau. Ce tableau est indexé numériquement à partir de 0. Il peut s'avérer très utile d'indexer ce tableau de résultats d'une autre façon en utilisant par exemple l'id de l'entité ou tout autre champ unique.

Doctrine permet cela grâce au 3ème argument optionnel de la méthode from du QueryBuilder.

Par exemple :

$this
    ->get('doctrine.orm.entity_manager')
    ->createQueryBuilder()
    ->select('category')
    ->from('AcmeDemoBundle:Category', 'category', 'category.id');

retournera un tableau d'objets Category indexé par leurs id.

Ou :

$this
    ->get('doctrine.orm.entity_manager')
    ->createQueryBuilder()
    ->select('category.name')
    ->from('AcmeDemoBundle:Category', 'category', 'category.slug');

retournera un tableau de chaines de caractères (le nom de la catégorie) indexé par le slug de la catégorie.

Attention, vous ne pouvez indexer que par un attribut de l'entité choisi dans le from et Doctrine écrasera les résultats en cas de clé non unique.

Les commentaires