php - Laravel 将所有父类别显示为特定子类别的树

标签 php laravel eloquent nested-lists

我正在尝试获取子类别的类别树

假设我有一个名为Accessories

的子类别

此子类别有电子>笔记本电脑

所以是电子产品 > 笔记本电脑 > 配件

表格:

-----------------------------------------
| id    | parent_id     | name          |
|----   |-----------    |-------------  |
| 1     | 0             | Electronics   |
| 2     | 1             | Laptops       |
| 3     | 2             | Accessories   |
-----------------------------------------

我可以获得子类别的根类别,例如:

function getTopParent($category) {
    if($category->parent_id === null) {
        return $category->name;
    }

    return getTopParent(App\Category::find($category->parent_id));

    // Will return Electronics

}

我还知道如何显示类别,如树,see here

function printCategoryName($categories, $parentName = '') {
    foreach ($categories as $category) {
        $name = $parentName ? implode(' > ', [$parentName, $category->name]) : $category->name;
        echo sprintf('%s%s', $name, PHP_EOL);

        if (count($category->children) > 0) {
            printCategoryName($category->children, $name);
        }
    }
}

printCategoryName($categories);

我需要的是给一个像 Accessories 这样的类别并获取树并获取该子类别的类别树:

电子产品 > 笔记本电脑 > 配件

我怎样才能做到这一点?

最佳答案

    protected function getCategoriesTree()
    {
        $categories = Category::where('parent_id',0)->get();

        if($categories->count())
        {
            foreach ($categories as $category) 
            {
                $categories_tree[$category->id] = $this->getChildCategories($category);
            }
        }

        return response()->json(['categories' => $categories_tree]);
    }

    private function getChildCategories($category)
    {
        $sub_categories = [];

        $childs = Category::where('parent_id', $category->id)->get();

        $sub_categories = $category;

        $sub_categories['sub_categories'] = [];

        if($childs->count())
        {
            $sub_categories['sub_categories'] = $childs;
        }

        return $sub_categories;
    }

关于php - Laravel 将所有父类别显示为特定子类别的树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59748528/

相关文章:

php - move_uploaded_file - 防止旋转/忽略 exif 数据

javascript - 使用 ajax 拖放功能重新排序列字段? PHP/jQuery

php - Laravel 查询 "if"条件?

PHP Laravel API - 如何限制对多个受信任主机的请求?

laravel - 与命名空间的多态 Eloquent 关系

php - 连接到在 Ubuntu AWS 实例中创建的 MySQL 数据库

javascript - javascript 中的 html 不工作

php - 如何使用 Laravel 5.1 将上传的文件名保存在表中

mysql - Laravel数据库结构 'apply'

php - 无法使用 Eloquent ORM 更新 mysql 行