protected function resultsToModels($connection, ResultSet $results, array $columns = [])
    {
        $models = [];

        if ($results->valid())
        {
            $resultColumns = $results->getColumns();

            foreach ($results as $result)
            {
                $attributes = $this->getProperties($resultColumns, $result, $columns);

                // Now that we have the attributes, we first check for mutations
                // and if exists, we will need to mutate the attributes accordingly.
                if ($this->shouldMutate($attributes))
                {
                    $models[] = $this->mutateToOrigin($result, $attributes);
                }
                // This is a regular record that we should deal with the normal way, creating an instance
                // of the model out of the fetched attributes.
                else
                {
                    $model = $this->model->newFromBuilder($attributes);
                    $model->setConnection($connection);
                    $models[] = $model;
                }
            }
        }

        return $models;
    }