У меня есть сущность, которая выглядит следующим образом:
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();
Я хотел бы, чтобы результат массива, который я возвращаю из этого метода, выглядел примерно так:результаты из Doctrine 2, поэтому он строит массив результатов таким образом?Если нет, как бы вы построили этот массив?Я все еще играю с Doctrine 2, и я заметил, что каждый элемент в моем массиве $privileges
имеет $privilege->getChildren()
, который возвращает PersistentCollection
, очевидно, не фактическую запись.
Если мне нужно построить это вложенное дерево самостоятельно (то есть: нет встроенного в Doctrine для этого способа), как мне превратить это PersistentCollection
, возвращенное в фактические данные, чтобы я мог построить какой-то рекурсивныйспособ построить это для меня?Я просматриваю документы, но явно не в том месте.