category 添加查询条件问题

问题咨询 · cqslxz · 于 5年前 发布 · 1871 次阅读

你好,我在【\vendor\fancyecommerce\fecshop\services\category\CategoryMongodb】getTreeArr方法中添加条件,但是一直报内存问题,加了后同样报,这是不是有问题啊。一个查询怎末会占用折磨多内存,数据又不多,代码如下

public function getTreeArr($rootCategoryId = '', $lang = '', $appserver=false, $level = 1)
    {
        ini_set("memory_limit","180M");
        $arr = [];
        if (!$lang) {
            $lang = Yii::$service->fecshoplang->defaultLangCode;
        }
        if (!$rootCategoryId) {
            $where = ['parent_id' => '0'];
        } else {
            $where = ['parent_id' => $rootCategoryId];
        }
       // $where = ['menu_show' => 1];
        // $where = ['status' => 2];
        $categorys = $this->_categoryModel->find()->asArray()->where($where)->all();
        //var_dump($categorys);exit;
        $idKey = $this->getPrimaryKey();
        if (!empty($categorys)) {
            foreach ($categorys as $cate) {
                $idVal = (string) $cate[$idKey];
                $arr[$idVal] = [
                    $idKey    => $idVal,
                    'level'   => $level,
                    'name'    => Yii::$service->fecshoplang->getLangAttrVal($cate['name'], 'name', $lang),
                    'thumbnail_image' => $cate['thumbnail_image']?Yii::$service->category->image->getUrl($cate['thumbnail_image']):null,
                    'img' => $cate['image']?Yii::$service->category->image->getUrl($cate['image']):null,
                    'menu_show'=> $cate['menu_show'],
                    'status'=> $cate['status'],
                ];
                if ($appserver) {
                    $arr[$idVal]['url'] = '/catalog/category/'.$idVal;
                }
                //echo $arr[$idVal]['name'];

                if ($this->hasChildCategory($idVal)) {
                    $arr[$idVal]['child'] = $this->getTreeArr($idVal, $lang, $appserver, $level+1);
                }
            }
        }

        return $arr;
    }

我加的条件是13行,谢谢

共收到 4 条回复 问题提问
Fecmall#15年前 0 个赞

请描述清楚问题,把报错信息完整的贴上去

cqslxz#25年前 0 个赞

我一加【$where = ['menu_show' => 1];】就报如下错误

Fecmall#35年前 0 个赞

是你写的代码有问题, 需要这样写

$where['menu_show'] = 1;

按照你的写法,直接把上面 $where 数组的其他子项阉割了,这个递归函数就会无线递归下去,多少内存 也给吃干净

这是一个很低级的问题,仔细排查就能看出来原因。

cqslxz#45年前 0 个赞

谢谢,没注意:sweat_smile:

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics