使用symfony3,doctrine2和stofDoctrineExtensionsBundle获取Gedmo Tree元素的parent_id

时间:2016-11-01 17:12:18

标签: symfony doctrine-orm tree doctrine-extensions stofdoctrineextensions

简介

我正在使用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

结论

请告知。

感谢您的时间和知识。

1 个答案:

答案 0 :(得分:2)

当使用getArrayResult时,必须提示获取所有相关值。

Vanilla回答[1]对我不起作用,所以我做了一点修改(查询的完整路径)。

$query->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true);

请注意,提示正在$query上进行,并且位于查询和获取结果之间。

链接:

  1. Found initial info here
  2. Documentation on hints