首页 > 解决方案 > Laravel:如何从多级类别中获取产品

问题描述

我正在查看我的代码,我意识到我使用的是数组。

这就是我从多级类别中获取产品的方式:

    public function childs()
    {
        return $this->hasMany(self::class, 'parent_id')->whereColumn('id', '!=', 'parent_id');
    }

    public function descendants()
    {
        $descendants = [];

        foreach ($this->childs as $category) 
        {
            array_push($descendants, $category);
            $descendants = array_merge($descendants, $category->descendants());
        }

        return $descendants;
    }

    public function treeProducts()
    {
        $categories = [$this];
        $categories = array_merge($categories, $this->descendants());

        $ids = [];

        forEach($categories as $category)
        {
            array_push($ids, $category->id);
        }

        return Product::whereIn('category_id', $ids);
    }

调用 treeProducts 将从每个子树中获取产品。但问题是我将类别和产品存储在数组中,使用 500 多种我认为会淹没 RAM 的产品。

如果不使用数组,我不能使用 Query Builder 执行此过程吗?

标签: laraveltreecategories

解决方案


推荐阅读