Kyslik\ColumnSortable\Sortable::queryOrderBuilder PHP Method

queryOrderBuilder() private method

private queryOrderBuilder ( Builder $query, array $sortParameters ) : Builder
$query Illuminate\Database\Query\Builder
$sortParameters array
return Illuminate\Database\Query\Builder
    private function queryOrderBuilder($query, array $sortParameters)
    {
        $model = $this;
        list($column, $direction) = $this->parseSortParameters($sortParameters);
        if (is_null($column)) {
            return $query;
        }
        if (method_exists($this, camel_case($column) . 'Sortable')) {
            return call_user_func_array([$this, camel_case($column) . 'Sortable'], [$query, $direction]);
        }
        $explodeResult = SortableLink::explodeSortParameter($column);
        if (!empty($explodeResult)) {
            $relationName = $explodeResult[0];
            $column = $explodeResult[1];
            try {
                $relation = $query->getRelation($relationName);
                $query = $this->queryJoinBuilder($query, $relation);
            } catch (BadMethodCallException $e) {
                throw new ColumnSortableException($relationName, 1, $e);
            } catch (\Exception $e) {
                throw new ColumnSortableException($relationName, 2, $e);
            }
            $model = $relation->getRelated();
        }
        if (isset($model->sortableAs) && in_array($column, $model->sortableAs)) {
            $query = $query->orderBy($column, $direction);
        } elseif ($this->columnExists($model, $column)) {
            $column = $model->getTable() . '.' . $column;
            $query = $query->orderBy($column, $direction);
        }
        return $query;
    }