/***
* 获取所有的一级分类
* @param Request $request
* @return array
*/
public function getAllCategory(Request $request)
{
try {
$list = ProductClassModel::query()
->where(['site_id' => Site::getCurrentSite()->getSiteId()])
->where('status', 1)
->orderBy('order', 'asc')
->get();
$list = !empty($list) ? $list->toArray() : [];
$newList = self::getTree($list);
return makeApiResponseSuccess('成功', $newList);
} catch (\Exception $e) {
return makeApiResponseError($e);
}
}
/***
* 优化无限递归
* @param $items
* @return array
*/
public static function getTree($items)
{
$items = array_column($items, null, 'id');
$tree = [];
foreach ($items as $item) {
$id = $item['id'];
$pid = $item['parent_id'];
isset($items[$pid]) ? $items[$pid]['sub'][$id] = &$items[$id] : $tree[$id] = &$items[$id];
}
return self::dueTree($tree);
}
/**
* 处理层级
* @param $tree
* @param int $level
* @return array
*/
public static function dueTree($tree, $level = 1)
{
$newTree = [];
$newLevel = $level;
foreach ($tree as $key => &$val) {
$val['level'] = $level;
if (isset($val['sub']) && is_array($val['sub'])) {
self::dueTree($val['sub'], ++$level);
} else {
$val['sub'] = [];
}
$level = $newLevel;
$newTree[$key] = $val;
}
return $newTree;
}
想法:一般在处理层级问题上大多数做法都是采用递归查询处理,这里采用一次查询,然后通过值引用方式遍历出层级关系,很大程度优化了查询数据库时间以及执行时间。
该代码示例展示了如何通过一次数据库查询获取所有一级分类,并使用引用方式构建层级结构,有效减少了数据库交互时间和执行时间,提高了系统性能。
4989

被折叠的 条评论
为什么被折叠?



