Bonjour

J'ai deux entités :

NOTE : id, title, description, isPublic, user
USER: id, email, firstname, lastname, password, salt, roles, tag

Je voudrais sélectionner seulement quelques colonnes de l'entité User lorsque je veux récupérer l'ensemble des entités Note dans ma base de données, tout en faisant une jointure afin d'avoir le propriétaire de la note. (Je ne veux pas toutes les colonnes de l'utilisateur car, je voudrais ne pas récupérer son mot de passe par exemple).

Donc dans le NoteRepository, j'ai créé une requête comme celle-ci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
$qb = $this->createQueryBuilder('n');
//Get the owner of the knowledge
$qb
    ->leftJoin('n.user', 'owner')
    ->addSelect('owner.tag as ownerTag, owner.firstname as ownerFirstname, owner.lastname as ownerLastname')
;
 
return $qb->getQuery()->getResult(Query::HYDRATE_ARRAY);
(J'insiste bien sur le fait que je veux utiliser une clause left-join car on peut imaginer que plusieurs personnes soit propriétaire d'une note)

Avec la requête précédente j'obtient quelque comme :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[
   {
      "0":{
         "id":6,
         "title":"A1",
         "description":"A1",
         "isPublic":false,
         "ownerTag":"#02a4c022d8",
         "ownerFirstname":"ama",
         "ownerLastname":"ama"
      }
   },
   {
      "1":{
         "id":7,
         "title":"Z1",
         "description":"Z1",
         "isPublic":false,
         "ownerTag":"#00a7bd24g8",
         "ownerFirstname":"z",
         "ownerLastname":"z"
      }
   }
]
En revanche je voudrais une réponse dans le genre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[
   {
      "0":{
         "id":6,
         "title":"A1",
         "description":"A1",
         "isPublic":false,
         "owner":{
            "tag":"#02a4c022d8",
            "firstname":"ama",
            "lastname":"ama"
         }
      }
   },
   {
      "1":{
         "id":7,
         "title":"Z1",
         "description":"Z1",
         "isPublic":false,
         "owner":{
            "tag":"#00a7bd24g8",
            "firstname":"z",
            "lastname":"z"
         }
      }
   }
]
Je ne comprends pas trop comment faire, car dès que j'utilise le addSelect pour signifier les colonnes que je veux garder, Doctrine à l'air de me retourner uniquement les colonnes de la dernière entité du left-join ...

Merci d'avance pour vos réponses !