Ленивая загрузка с Doctrine2 и Symfony2 с использованием DQL

У меня есть древовидная структура с родительским полем.В настоящее время я пытаюсь заставить все родительские узлы отображать путь к текущему узлу.

Обычно я выполняю цикл while для обработки всех узлов.

$current = $node->getParent();
while($current) {
  // do something
  $current = $current->getParent();
}

Работает метод findById по умолчанию . Поскольку у объекта есть несколько агрегированных полей, я использую метод настраиваемого репозитория для загрузки всех основных полей одним запросом.

public function findNodeByIdWithMeta($id) {
    return $this->getEntityManager()
        ->createQuery('
            SELECT p, a, c, cc, ca, pp FROM
            TestingNestedObjectBundle:NestedObject p
            JOIN p.actions a
            LEFT JOIN p.children c
            LEFT JOIN c.children cc
            LEFT JOIN c.actions ca
            LEFT JOIN p.parent pp
            WHERE p.id = :id
        ')
        ->setParameter('id', $id)
        ->setHint(
            \Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER,
            'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker'
        )
        ->getOneOrNullResult();
}

С этим кодом загрузка родителей не выполняется. Я получаю только непосредственного родителя (адрес LEFT JOIN p.parent pp ), но не родителей, указанных выше. Например. $ node-> getParent () -> getParent () возвращает null .

Что не так с моим кодом? Я неправильно понял ленивую загрузку?

Большое спасибо, Hacksteak

37
задан Benjamin 1 September 2012 в 10:25
поделиться