У меня две сущности:
Я хотел бы выбрать только несколько столбцов пользователя, когда я получаю все заметки моей базы данных (например, чтобы не получить пароль пользователя)
Итак, в NoteRepository я сделал такой запрос доктрины:
$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);
(Я настаиваю на том, чтобы сделать это с помощью предложения join, потому что мы можем представить себе нескольких пользователей, таких как владелец заметки)
И я получаю следующий ответ в формате JSON:
[
{
"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"
}
}
]
Но мне бы хотелось такого ответа:
[
{
"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"
}
}
}
]
Я не знаю, как это получить. Спасибо, что помогли мне;)
То же самое, что я бы не стал, но с тегом вместо тега владельца и т. д.




Нашел вот этот https://github.com/Atlantic18/DoctrineExtensions/issues/118
Я не уверен, что вы сможете сделать это прямо с помощью queryBuilder.
Но вы наверняка могли бы сделать это с помощью PHP, работающего над вашим массивом :)
Хорошо, я нашел решение. Мне нужно использовать предложение ЧАСТИЧНЫЙ следующим образом:
$qb = $this->createQueryBuilder('n');
//Get the owner of the knowledge
$qb
->leftJoin('n.user', 'owner')
->addSelect('PARTIAL owner.{id,tag,firstname,lastname}')
;
return $qb->getQuery()->getResult(Query::HYDRATE_ARRAY);
Что будет, если сделать
->addSelect('owner.tag, owner.firstname , owner.lastname')