public function tree($vid, $parent = 0, $max_depth = NULL) { static $trees = []; if (empty($trees[$vid])) { $tree = array(); $cleanParent = array(); $elems = \Yii::$app->db->createCommand('SELECT * FROM {{%taxonomy_items}} taxonomy_items WHERE vid = :vid ORDER BY weight')->bindValue(':vid', $vid)->queryAll(); foreach ($elems as $itm) { $tree[$itm['id']] = $itm; } $tree = DataHelper::treeMap($tree); $trees[$vid] = $tree; } else { $tree = $trees[$vid]; } if ($parent) { $tree = DataHelper::treeParent($tree, $parent); } if ($max_depth !== NULL) { $tree = DataHelper::treeDepth($tree, $max_depth); } return $tree; }