getArrayResult для объекта с ассоциацией ManyToOne - PullRequest
9 голосов
/ 30 марта 2011

Наличие следующих основных таблиц (отношение один ко многим)
Клиент - имеет много пользователей.
Пользователи - каждый пользователь принадлежит одному клиенту.

В очень простом примере, если я запрашиваю сущность пользователя (Querybuilder) с getArrayResult() вижу следующее:

  1. Фактически сгенерированный SQL содержит поле внешнего ключа, которое должно быть возвратился (т.е. ClientID)
  2. Фактически возвращенный массив данных НЕ содержит внешний ключ поле.

На данном этапе мне не нужно возвращать сторонние данные и поэтому не нужно присоединиться к связанной таблице.

Так что вопрос ...
Что или как мне вернуть значение внешнего ключа в моем массиве?

Запрос:

   $qb = $this->_em->createQueryBuilder();  
   $qb->select('e');  
   $qb->from('Entity\User', 'e');  

SQL - это:

SELECT w0_.Id AS Id0, w0_.Name AS Name2, w0_.ClientID AS ClientID7
FROM users w0_  

Ответы [ 2 ]

18 голосов
/ 02 апреля 2011

Попробуйте установить подсказку запроса HINT_INCLUDE_META_COLUMNS для запроса (не для сборщика) перед его выполнением.

$q->setHint(Query::HINT_INCLUDE_META_COLUMNS, true);
0 голосов
/ 31 марта 2011

Насколько я знаю, вы не можете сделать это, потому что ClientID не является собственностью пользователя.У пользователя есть такое свойство, как $ client, и у этого объекта клиента есть идентификатор $.

Это сбивает вас с толку, потому что вы имеете дело с Entites, но все еще думаете о SQL.

Решение, хотя и несколько менее эффективное, вероятно, заключалось бы в том, чтобы присоединить сущность Client к вашему DQL-запросу, а затем получить $results[N]['client']['id'] (или подобное, я не слишком знаком с getResultArray ())

...