php递归函数性能优化
我正在使用Symfony 2.8和条令2.4 我有一个具有一对多自引用关联映射的实体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
实体:
身份证件
名称
家长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扩展版本