Php Doctrine2与同一表中的子实体

Php Doctrine2与同一表中的子实体,php,mysql,symfony,doctrine-orm,Php,Mysql,Symfony,Doctrine Orm,我有一个数据库表,通常(由于NDA)具有以下结构: Category: id(int) parent_id(int) title(string) description(text) 请注意,我无法更改表的模式,因此这不是解决问题的可能方法 我需要能够获得所有这些类别的信息,包括他们所有孩子的列表,但我不太确定如何做到这一点。我相当肯定我需要使用递归,但我不确定是否有任何内置的原则可以帮助它,或者我是否需要编写原始的DQL甚至SQL。目前,我的Symfony控制器中有以下各项:

我有一个数据库表,通常(由于NDA)具有以下结构:

Category:
id(int)    parent_id(int)    title(string)    description(text)
请注意,我无法更改表的模式,因此这不是解决问题的可能方法

我需要能够获得所有这些类别的信息,包括他们所有孩子的列表,但我不太确定如何做到这一点。我相当肯定我需要使用递归,但我不确定是否有任何内置的原则可以帮助它,或者我是否需要编写原始的DQL甚至SQL。目前,我的Symfony控制器中有以下各项:

$em = $this->get('doctrine')->getManager();

$categoryQuery = $em->getRepository('Acme\MyBundle\Entity\Category')->findBy(array(), array('sortPosition' => 'asc'));
$categories = array();

foreach ($categoryQuery as $category) {
        $categories[] = array(
            'id' => $category->getId(),
            'parent' => $category->getParent(),
            'title' => $category->getTitle(),
            'description' => $category->getDescription(),
        );
}
还有一个问题:我需要以JSON格式输出这些信息

最终,我不确定

A.如何创建一个查询,让我同时获得一个类别及其所有子项信息(可以有更多子项)

B.然后如何将该信息输出为JSON


如果您有条令中定义的类别关系,任何想法都将受到极大的欢迎:

$categoryQuery = $em->getRepository('Acme\MyBundle\Entity\Category')
  ->createQueryBuilder('c')
  ->leftJoin('c.subCategories sc') // assuming your category <> category relation is called "subCategories
  ->getQuery()
  ->getResult()
  ;
$query = $em->createQuery(
    'SELECT c
    FROM AcmeMyBundle:Category c
    LEFT JOIN AcmeMyBundle:Category sc on sc.parent_id = c.id
    ORDER BY sortPosition ASC'
);

$categories = $query->getResult();
并将它们作为JSON返回

return new JSONResponse($categories); 

递归选择是。。。没有路很难/不可能

见:

B.您可以在Symfony2中使用此选项:

Symfony\Component\HttpFoundation\JsonResponse