我正在使用Symfony v3.1.6,Doctrine v2.5.4和StofDoctrineExtensionsBundle [1]来管理树结构。
要设置树结构,我在Symfony.com上使用了文档[2],然后是关于GitHub的文档[3]。然后我继续进行树设置 - 使用示例[4]中的树实体,并使用[5]中的代码创建树。
CategoryRepository
public function getParentId($child_node_id)
{
// get parent_id of a tree element
$em = $this->getEntityManager();
$query = $em->createQueryBuilder()
->select('c')
->from('AppBundle:Category', 'c')
->where('c.id = :nodeId')
->setParameter('nodeId', $child_node_id)
->setMaxResults(1)
->getQuery();
$parent = $query->getResult();
$parent_null = $parent[0]->getParent();
// if parent element is null - efectively element is root of the tree
if ($parent_null === null)
{
$parent_id = $parent[0]->getId();
}
// if parent element is not root of the tree
else
{
$parent_id = $parent[0]->getParent()->getId();
}
return $parent_id;
}
当我使用$parent = $query->getResult()
时,我得到以下输出:
array:1 [?
0 => Category {#581 ?
-id: 3
-title: "Vegetables"
-is_file: false
-lft: 4
-lvl: 1
-rgt: 11
-root: Category {#518 ?}
-parent: Category {#518 ?
-id: 1
-title: "Food"
-is_file: false
-lft: 1
-lvl: 0
-rgt: 12
-root: Category {#518}
-parent: null
-children:
但是当我使用$parent = $query->getArrayResult()
时,我得到了:
array:1 [?
0 => array:6 [?
"id" => 2
"title" => "Fruits"
"is_file" => false
"lft" => 2
"lvl" => 1
"rgt" => 3
]
]
请注意getArrayResult
输出中没有parent_id ...
所以问题是 - 如何使用parent_id
在查询结果中获取树节点getArrayResult
?
请告知。
感谢您的时间和知识。
答案 0 :(得分:2)
当使用getArrayResult
时,必须提示获取所有相关值。
Vanilla回答[1]对我不起作用,所以我做了一点修改(查询的完整路径)。
$query->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true);
请注意,提示正在$query
上进行,并且位于查询和获取结果之间。
链接: