Php Doctrine2与同一表中的子实体
我有一个数据库表,通常(由于NDA)具有以下结构: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控制器中有以下各项:
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