hac*_*k25 37 php symfony doctrine-orm
我有一个父结构的树结构.目前我正在尝试让所有父节点显示当前节点的路径.
基本上我正在做一个while循环来处理所有节点.
$current = $node->getParent();
while($current) {
// do something
$current = $current->getParent();
}
Run Code Online (Sandbox Code Playgroud)
使用默认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();
}
Run Code Online (Sandbox Code Playgroud)
使用该代码,加载父项失败.我只得到直接的父母(由LEFT JOIN p.parent pp
他们解决)而不是上面的父母.例如$node->getParent()->getParent()
返回null
.
我的代码有什么问题?我误解了延迟加载的东西吗?
非常感谢Hacksteak
看起来您正在使用邻接模型在关系数据库中存储树.这反过来意味着,您将需要每个级别的连接,以通过单个查询获得所有祖先.
由于您已经在使用Doctrine Extension Library,我建议您查看Tree组件.