目标:
我有一个类别实体。每个类别都可以有子类别。
现在,我想通过id获得特定的类别节点及其所有父节点。
当前解决方案(自定义存储库函数):
public function getChildrenHierarchyByCategoryIDs($categoryIDsArray)
{
$qb = $this->getNodesHierarchyQueryBuilder();
$qb->andWhere('node.id in (:categoryIDs)')
->setParameter('categoryIDs', $categoryIDsArray)
->orWhere('node.id in (:rootNodes)') // "Workaround", get all available root nodes (1st level only) manually, because I don't know how to get them by children's parentID (node.parent) "automatically" (with second level etc.)
->setParameter('rootNodes', $this->getRootNodes())
;
$aComponents = $qb->getQuery()->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
return $this->buildTreeArray($aComponents);
}问题:
如何自动获得父节点(由id找到的所有节点的父节点),而不是通过id手动获取每个可能的父节点(请参阅代码中的“解决方案”)?
我找不到任何解决办法。
我认为应该是这样的:不起作用的->orWhere('node.id in (node.parent)')。(语法错误第0行,col 89: Error:预期的文字,got‘节点’)
提前感谢您抽出时间来!
发布于 2021-01-16 10:49:42
如果需要获取给定节点的所有父节点(在层次结构中),则非常简单:
在实体中添加
public function getParentNodes(?Category $node = null, $parents = []): array
{
if (!$node) {
$node = $this;
}
if (null !== $this->getParent()) {
$parent = $this->getParent();
$parents[] = $parent;
return $parent->getParentNodes($node, $parents);
}
return $parents;
}之后,$parents数组(以及metho调用结果本身)将包含给定节点的所有父节点(对象)。
https://stackoverflow.com/questions/60137801
复制相似问题