private function underscore($name)
    {
        if (!isset($this->underscoreCache[$name])) {
            $this->underscoreCache[$name] = strtolower(preg_replace('/(.)([A-Z])/', "$1_$2", $name));
        }

        return $this->underscoreCache[$name];
    }