Kyslik\ColumnSortable\Sortable::queryJoinBuilder PHP Method

queryJoinBuilder() private method

private queryJoinBuilder ( Builder $query, $relation ) : Builder
$query Illuminate\Database\Query\Builder
$relation
return Illuminate\Database\Query\Builder
    private function queryJoinBuilder($query, $relation)
    {
        $relatedModel = $relation->getRelated();
        $relatedTable = $relatedModel->getTable();
        $parentModel = $relation->getParent();
        $parentTable = $parentModel->getTable();
        if ($relation instanceof HasOne) {
            $relatedPrimaryKey = $relation->getForeignKey();
            $parentPrimaryKey = $parentTable . '.' . $parentModel->primaryKey;
            return $query->select($parentTable . '.*')->join($relatedTable, $parentPrimaryKey, '=', $relatedPrimaryKey);
        } elseif ($relation instanceof BelongsTo) {
            $relatedPrimaryKey = $relatedTable . '.' . $relatedModel->primaryKey;
            $parentPrimaryKey = $parentTable . '.' . $relation->getForeignKey();
            return $query->select($parentTable . '.*')->join($relatedTable, $parentPrimaryKey, '=', $relatedPrimaryKey);
        } else {
            throw new \Exception();
        }
    }