gpt4 book ai didi

php - 学说 2 : Building a nested array tree from a self-refrencing Entity

转载 作者:搜寻专家 更新时间:2023-10-31 21:17:01 24 4
gpt4 key购买 nike

我有一个看起来像这样的实体:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com