php递归函数性能优化

php递归函数性能优化,php,mysql,symfony,recursion,doctrine-orm,Php,Mysql,Symfony,Recursion,Doctrine Orm,我正在使用Symfony 2.8和条令2.4 我有一个具有一对多自引用关联映射的实体 实体: 身份证件 名称 家长id 示例: id: 1 name: A parent_id: null id: 2 name: B parent_id = 1 id: 3 name: C parent_id = 2 id: 4 name: D parent_id = 3 我编写了一个函数,用于查找父对象的所有嵌套子对象的id public function getAllChildrenIdRecu

我正在使用Symfony 2.8和条令2.4

我有一个具有一对多自引用关联映射的实体

实体:
身份证件
名称
家长id
示例:

id: 1 
name: A 
parent_id: null

id: 2
name: B
parent_id = 1

id: 3
name: C
parent_id = 2

id: 4
name: D
parent_id = 3
我编写了一个函数,用于查找父对象的所有嵌套子对象的id

public function getAllChildrenIdRecursively($entity)
{
    $result = array();
    if (count($entity->getChildren()) > 0) {
        $result[] = $entity->getId();
        foreach ($entity->getChildren() as $child) {
            $result = array_merge($result, $this->getAllChildrenIdRecursively($child)) ;
        }
    }

    return $result;
}
如果我调用这个函数getAllChildrenidRecursive(2),那么我将得到3,4

此函数正在工作,但我的问题是它在数据库中生成的查询太多,几乎需要1.5秒。。查询生成的查询超过2500个,总结果=2600个,总行=5000个

如何减少查询时间?

任何帮助都将不胜感激!
感谢您的子代实现,您没有有效优化代码的解决方案。您必须更改您的实现,以便只需一个请求就可以遍历所有子级和子级。树实现是一个更好的解决方案,因为通过一个SQL请求,您可以捕获所有子项,通过另一个SQL请求,您可以拥有所有父项,等等

我认为你应该看看这个优秀的,以避免递归。如果你只在2.4条令中,测试2.3扩展版本