public function orderBy($columns, $direction = 'asc')
    {
        if (is_string($columns))
        {
            $columns = $this->stringArgumentToArray($columns);
        }
        elseif ($columns instanceof Expression)
        {
            $this->orders[] = array($columns, $direction); return $this;
        }
        
        foreach ($columns as $key => $column) 
        {
            if (is_numeric($key)) 
            {
                if ($column instanceof Expression)
                {
                    $this->orders[] = array($column, $direction);
                } else {
                    $this->orders[$column] = $direction;
                }
            } else {
                $this->orders[$key] = $column;
            }
        }

        return $this;
    }