2014-01-25 2 views
0

Добрый вечер всем.Доктрина MongoDB эталонный гидрат ложный и простой

Пожалуйста, помогите мне с моей проблемой «Доктрина/Монго».

У меня есть документ, который имеет ReferenceOne для другого документа и ReferenceMany для другого документа.

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

Я пытаюсь сделать это так:

return $this->createQueryBuilder() 
     ->field('category')->references($category) 
     ->field('vendor')->prime() 
     ->field('chars')->prime() 
     ->hydrate(false) 
     ->getQuery() 
     ->execute(); 

Но в результате я получаю массив как это:

Array 
(
[0] => Array 
    (
     [_id] => MongoId Object 
      (
       [$id] => 52e374c21c83735f098b4567 
      ) 

     [category] => Array 
      (
       [$ref] => Category 
       [$id] => MongoId Object 
        (
         [$id] => 52dc56eb1c837345098b4567 
        ) 

       [$db] => doctrine 
      ) 

     [chars] => Array 
      (
       [0] => Array 
        (
         [$ref] => ProductChar 
         [$id] => MongoId Object 
          (
           [$id] => 52e374c21c83735f098b4568 
          ) 

         [$db] => doctrine 
        ) 

       [1] => Array 
        (
         [$ref] => ProductChar 
         [$id] => MongoId Object 
          (
           [$id] => 52e374c21c83735f098b4569 
          ) 

         [$db] => doctrine 
        ) 

      ) 

     [href] => href-test 
     [price] => 500 
     [title] => test 
     [vendor] => Array 
      (
       [$ref] => Vendor 
       [$id] => MongoId Object 
        (
         [$id] => 52e170571c837360098b4567 
        ) 

       [$db] => doctrine 
      ) 

    ) 

) 

Но не нужно только только идентификаторы ссылочных документов, но все значения.

Итак, теперь я не знаю, как получить все дерево массивов документов.

Спасибо вам заранее!

ответ

3

Грунтование требует гидратации. Если вы исследуете Query::execute(), вы увидите, что он внезапно возвращается, если гидратация отключена. Обработка праймера будет происходить позже в этом методе, если бы была включена гидратация. Я создал #800, чтобы гарантировать, что мы документируем это ограничение, поскольку оно не обсуждается в Priming References. Возможно, в будущем будет реализована поддержка прайминга, но у нас нет никаких планов на будущее.

+0

благодарит за ответ! –

Смежные вопросы