• 获取树结构数据


        public function getRoleFields()
        {
            $hrmAuthFuncFields = HrmAuthFuncFieldsModel::query()->valid()->get();
            $hrmAuthFuncFieldMaps = [];
            foreach ($hrmAuthFuncFields as $hrmAuthFuncField) {
                $hrmAuthFuncFieldMaps[$hrmAuthFuncField->father_id][] = $hrmAuthFuncField;
            }
            $result = self::formatFileds($hrmAuthFuncFieldMaps, 0);
            return $result;
        }
    
        public function formatFileds($hrmAuthFuncFieldMaps, $fatherId)
        {
            if (!isset($hrmAuthFuncFieldMaps[$fatherId])) {
                return [];
            }
            $result = [];
            $directories = $hrmAuthFuncFieldMaps[$fatherId];
    
            foreach ($directories as $directory) {
                $treeNode = [
                    'field_name' => $directory->field_name,
                    'field_des'  => $directory->field_des,
                    'id' => $directory->id,
                    'children' => [],
                ];
                if (!$directory->is_empty) {
                    $treeNode['children'] = $this->formatFileds($hrmAuthFuncFieldMaps, $directory->id);
                }
                $result[] = $treeNode;
            }
    
            return $result;
        }

    总的来说就是先根据father_id进行分类,然后分完类之后之后递归获取数据即可。

    同样的我们需要考虑如何获取树的所有节点,然后将这些节点合并起来,我们可以这样做:

            // 查询该节点的子节点
            $directories = CatalogueModel::query()
                ->where('father_id', $parentNode->id)
                ->get();
            $allCatalogues = $directories;
    
            // 查询出节点下的所有目录
            while (true) {
                $nextLevelNodes = new Collection();
                foreach ($directories as $directory) {
                    if ($directory->catalogue_empty) {
                        continue;
                    }
                    $nextLevelNodes = $nextLevelNodes->merge($directory->childCatalogues);
                }
                if (count($nextLevelNodes) === 0) {
                    break;
                }
                $allCatalogues = $allCatalogues->merge($nextLevelNodes);
                $directories = $nextLevelNodes;
            }
  • 相关阅读:
    团队作业第四次—项目系统设计与数据库设计
    团队Github实战训练
    第三次团队作业(需求分析)
    团队作业——UML设计
    项目介绍
    Happy Tree Friends——团队展示
    Alpha冲刺 (1/9)
    团队作业第四次—项目系统设计与数据库设计
    团队Github实战训练
    团队作业——需求分析
  • 原文地址:https://www.cnblogs.com/cjjjj/p/11077396.html
Copyright © 2020-2023  润新知