Как установить схему результата в запросе Doctrine? - PullRequest
0 голосов
/ 29 июня 2019

Я хочу создать клиентский API-интерфейс JSON для внешнего интерфейса и для этого использую Symfony с Doctrine. В репозитории клиентов есть следующий код:

public function getCustomerById($customerId) {
    return $this->createQueryBuilder('c')
    ->andWhere('c.customerId = :id')
    ->setParameter('id', $customerId)
    ->getQuery()
    ->getResult();
}

С этим кодом я получаю массив со всеми столбцами моей клиентской сущности или таблицы. Также у меня есть два отношения ManyToOne, например пользователь. Вышеупомянутый запрос также выбирает ВСЕ столбцы из этой пользовательской таблицы и помещает данные в дополнительный ключ, который является именно тем, что я хочу, но не во все столбцы, например. Я не хочу пароль в результате. Так есть ли простой способ указать, какие столбцы следует запрашивать ТОЛЬКО из объединенной таблицы, или мне нужно выбрать ВСЕ столбцы из клиента И пользователя, которого я хочу?

Если я попробую последнее с указанными столбцами в результате, все столбцы будут находиться на одном уровне в массиве (пользовательские данные не гидратированы под дополнительным ключом).

Ожидаемый результат / массив должен быть:

...
firstName: '',
lastName: '',
user: 
    userId: 1,
    userName: '',
creationDate: '',
...

Как я могу получить такой результат и гидрировать соединенные столбцы таблицы в дополнительном ключе, как пользователь выше, без дополнительного отображения данных из одного массива в другой?

1 Ответ

0 голосов
/ 29 июня 2019

Я получаю вышеуказанный результат, когда использую частичный выбор

SELECT partial c.{customerId, ...}, partial u.{userId, userName} ...

Тем не менее, он возвращает массив со всеми столбцами, но те, которые не выбраны, равны нулю. При использовании режима гидратации HYDRATE_ARRAY они исчезли.

...