使用DQL使用Therinsium2和Symfony2进行延迟加载
我有一个带有父字段的树结构。目前,我正在尝试让所有父节点显示当前节点的路径。
基本上,我正在做一个 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