diff --git a/src/Sorts/Strategies/BelongsToSort.php b/src/Sorts/Strategies/BelongsToSort.php index 66cd647..488e11d 100644 --- a/src/Sorts/Strategies/BelongsToSort.php +++ b/src/Sorts/Strategies/BelongsToSort.php @@ -15,12 +15,15 @@ public function apply(): Builder $foreignKeyKey = $this->model->{$this->relationName}()->getQualifiedForeignKeyName(); $localKey = $this->model->{$this->relationName}()->getQualifiedOwnerKeyName(); $relatedTable = $relatedModel->getTable(); + $alias = $relatedTable . '_' . 'virtual_sort'; + $localKeyAlias = str($localKey)->replace($relatedTable, $alias)->__toString(); return $this->query->orderBy( $relatedModel::query() - ->select("{$relatedTable}.{$this->column}") - ->whereColumn($localKey, $foreignKeyKey) - ->orderByRaw("{$relatedTable}.{$this->column} {$this->direction}") + ->from("{$relatedTable} as {$alias}") + ->select("{$alias}.{$this->column}") + ->whereColumn($localKeyAlias, $foreignKeyKey) + ->orderByRaw("{$alias}.{$this->column} {$this->direction}") ->limit(1), $this->direction ); diff --git a/src/Sorts/Strategies/HasManySort.php b/src/Sorts/Strategies/HasManySort.php index b2bb0a2..ab497e3 100644 --- a/src/Sorts/Strategies/HasManySort.php +++ b/src/Sorts/Strategies/HasManySort.php @@ -13,14 +13,17 @@ public function apply(): Builder /** @var Model $relatedModel */ $relatedModel = $this->model->{$this->relationName}()->getRelated(); $foreignKeyKey = $this->model->{$this->relationName}()->getQualifiedForeignKeyName(); - $localKey = $this->model->{$this->relationName}()->getQualifiedParentKeyName(); + $localKey = $this->model->{$this->relationName}()->getQualifiedOwnerKeyName(); $relatedTable = $relatedModel->getTable(); + $alias = $relatedTable . '_' . 'virtual_sort'; + $localKeyAlias = str($localKey)->replace($relatedTable, $alias)->__toString(); return $this->query->orderBy( $relatedModel::query() - ->select("{$relatedTable}.{$this->column}") - ->whereColumn($localKey, $foreignKeyKey) - ->orderByRaw("{$relatedTable}.{$this->column} {$this->direction}") + ->from("{$relatedTable} as {$alias}") + ->select("{$alias}.{$this->column}") + ->whereColumn($localKeyAlias, $foreignKeyKey) + ->orderByRaw("{$alias}.{$this->column} {$this->direction}") ->limit(1), $this->direction ); diff --git a/src/Sorts/Strategies/HasOneSort.php b/src/Sorts/Strategies/HasOneSort.php index 6490243..808a872 100644 --- a/src/Sorts/Strategies/HasOneSort.php +++ b/src/Sorts/Strategies/HasOneSort.php @@ -15,12 +15,15 @@ public function apply(): Builder $foreignKeyKey = $this->model->{$this->relationName}()->getQualifiedForeignKeyName(); $localKey = $this->model->{$this->relationName}()->getQualifiedParentKeyName(); $relatedTable = $relatedModel->getTable(); + $alias = $relatedTable . '_' . 'virtual_sort'; + $localKeyAlias = str($localKey)->replace($relatedTable, $alias)->__toString(); return $this->query->orderBy( $relatedModel::query() - ->select("{$relatedTable}.{$this->column}") - ->whereColumn($localKey, $foreignKeyKey) - ->orderByRaw("{$relatedTable}.{$this->column} {$this->direction}") + ->from("{$relatedTable} as {$alias}") + ->select("{$alias}.{$this->column}") + ->whereColumn($localKeyAlias, $foreignKeyKey) + ->orderByRaw("{$alias}.{$this->column} {$this->direction}") ->limit(1), $this->direction );