作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个看起来像这样的实体:
class Privilege
{
/**
* @Id @Column(type="bigint")
* @GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @Column(type="string",length=255)
*/
private $name;
/**
* @Column(type="string",length=255)
*/
private $slug;
/**
* @OneToMany(targetEntity="Privilege", mappedBy="parent")
*/
private $children;
/**
* @ManyToOne(targetEntity="Privilege", inversedBy="children")
* @JoinColumn(name="p_id", referencedColumnName="id")
*/
private $parent;
如果 Privilege Entity
没有父实体,则该字段为 NULL。我有一个像这样的基本查询:
$qb = $this->em->createQueryBuilder()
->select('p')
->from('\Dashboard\Entity\Privilege', 'p')
->andWhere('p.parent IS NULL');
$q = $qb->getQuery();
$privileges = $q->getResult();
我希望从此方法返回的数组结果看起来类似于:
root1:
child1:
subchild1a
subchild2a
child2:
subchild1b
subchild2b
subchild3b
subsubchild1b
child3:
subchild1c
root2:
....
....
有没有办法对 Doctrine 2 的结果进行 HYDRATE,从而以这种方式构建数组结果?如果没有,你将如何构建这个数组?我仍在研究 Doctrine 2,我注意到我的 $privileges
数组中的每个元素都有一个 $privilege->getChildren()
返回一个 PersistentCollection
,显然不是实际记录。
如果我必须自己构建这个嵌套树(即:在 Doctrine 中没有内置的方式来做到这一点),我如何将这个 PersistentCollection
返回到实际数据中,以便我可以构建某种类型为我构建它的递归方法?我正在查看文档,但显然在错误的地方。
最佳答案
结果已经在嵌套树中。 PersistentCollection
可以像数组一样迭代:
foreach($parent->getChildren() as $child) {
// $child is an instance of Privilige
}
您仍然应该尝试 $privileges = $q->getArrayResult();
看看是否会得到您想要的结果。
关于php - 学说 2 : Building a nested array tree from a self-refrencing Entity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6347663/
我是一名优秀的程序员,十分优秀!