public function tree($rootId, array $columns=[])
    {

        $columns = $this->pickColumns($columns);
        $columnsId = $this->getColumnsCacheId($columns);

        if (isset($this->_hierachyCache[$columnsId][$rootId])) {
            return $this->_hierachyCache[$columnsId][$rootId];
        }

        $result = $this->queryTree($rootId)
                       ->get($this->toSelectColumns($columns));

        $this->fillNodeCache($columnsId, $result);

        return $this->_rootNodeCache[$columnsId][$rootId];

    }