E commerce opencart getcategories函数进入无限循环

E commerce opencart getcategories函数进入无限循环,e-commerce,opencart,E Commerce,Opencart,我有一个opencart商店,大约有1300个类别,我无法插入新类别或编辑现有类别。我安装了分页功能,但它只加快了类别视图的速度。我做了一些调试,发现在管理面板中单击insert或edit后,下面的函数进入无限循环。有人能帮我修一下吗 public function getCategories($parent_id = 0) { $category_data = $this->cache->get('category.' . (int)$this->config

我有一个opencart商店,大约有1300个类别,我无法插入新类别或编辑现有类别。我安装了分页功能,但它只加快了类别视图的速度。我做了一些调试,发现在管理面板中单击insert或edit后,下面的函数进入无限循环。有人能帮我修一下吗

public function getCategories($parent_id = 0) {
        $category_data = $this->cache->get('category.' . (int)$this->config->get('config_language_id') . '.' . (int)$parent_id);

        if (!$category_data) {
            $category_data = array();

            $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) WHERE c.parent_id = '" . (int)$parent_id . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY c.sort_order, cd.name ASC");

            foreach ($query->rows as $result) {
                $category_data[] = array(
                    'category_id' => $result['category_id'],
                    'name'        => $this->getPath($result['category_id'], $this->config->get('config_language_id')),
                    'status'      => $result['status'],
                    'sort_order'  => $result['sort_order']
                );

                $category_data = array_merge($category_data, $this->getCategories($result['category_id']));
            }   

            $this->cache->set('category.' . (int)$this->config->get('config_language_id') . '.' . (int)$parent_id, $category_data);
        }

        return $category_data;
    }

我有一个当前的但不是永久的解决方案,对我有效。。。我不知道这是否是正确的方法,但它对我来说是有效的

$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category c ORDER BY c.parent_id,c.sort_order");
然后评论说

//$category_data = array_merge($category_data, $this->getCategories($result['category_id']));

目前这对我来说很有效,但我不知道这是否是正确的方法。谢谢大家的快速帮助。

第一个解决方案: 数据库中是否也有类别描述?若是这样,MySQL加载的这么多描述可能会给服务器带来负担。尝试优化查询,仅选择所需的列,您可以按以下方式更改查询:
$query=$this->db->query(“从…中选择c.category\u id,cd.name)。

第二种解决方案 您可以再执行一个调试技巧,解决我的问题。添加echo语句:

echo $result['name'];
$category_data = array_merge($category_data, $this->getCategories($result['category_id']));` `
通过这种方式,您将了解进程挂起的类别的确切位置。仅该特定类别可能存在一些问题

第三种解决方案 试着改变

'name'=>$this->getPath($result['category\u id',$this->config->get('config\u language\u id'),

致:

'name'=>$result['name'],


希望这有帮助。

在上面的什么时候开始循环?你能插入一些echo语句看看你能走多远吗?echo不起作用,因为这无法克服…在数组合并中,我变为递归,它进入子类别…所以在我的服务器上显示500个内部错误,在我的本地服务器上显示超时..我也不这样做直到缓存集函数才能到达。…那么你是说递归发生在
$category\u data=array\u merge($category\u data,$this->getCategories($result['category\u id']);
是否正确?如果是这样,在它回送或var\u dump之前,请输出$category\u data和$result['category\u id']的值