From da22f7990c654a361a165431f97800ee9677c8b4 Mon Sep 17 00:00:00 2001 From: Federico Liva Date: Tue, 16 Sep 2025 13:13:12 +0200 Subject: [PATCH 1/2] fix: handle 'as' alias in orderBy correctly in Select component Adjust the orderBy logic in the Select component's relationship method to correctly handle attributes that use aliases ('as' syntax). This ensures the query orders by the actual column name instead of the alias, preventing potential database errors. This change resolves issues when dealing with complex queries where attributes are aliased. --- packages/forms/src/Components/Select.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/forms/src/Components/Select.php b/packages/forms/src/Components/Select.php index e071b26f13..5afac390b8 100644 --- a/packages/forms/src/Components/Select.php +++ b/packages/forms/src/Components/Select.php @@ -797,7 +797,13 @@ class Select extends Field implements Contracts\CanDisableOptions, Contracts\Has $relationshipTitleAttribute = $component->getRelationshipTitleAttribute(); if (empty($relationshipQuery->getQuery()->orders)) { - $relationshipQuery->orderBy($relationshipQuery->qualifyColumn($relationshipTitleAttribute)); + $relationshipOrderByAttribute = $relationshipTitleAttribute; + + if (str_contains($relationshipTitleAttribute, ' as ')) { + $relationshipOrderByAttribute = substr($relationshipTitleAttribute, 0, strpos($relationshipTitleAttribute, ' as ')); + } + + $relationshipQuery->orderBy($relationshipQuery->qualifyColumn($relationshipOrderByAttribute)); } if (str_contains($relationshipTitleAttribute, '->')) { @@ -855,7 +861,13 @@ class Select extends Field implements Contracts\CanDisableOptions, Contracts\Has $relationshipTitleAttribute = $component->getRelationshipTitleAttribute(); if (empty($relationshipQuery->getQuery()->orders)) { - $relationshipQuery->orderBy($relationshipQuery->qualifyColumn($relationshipTitleAttribute)); + $relationshipOrderByAttribute = $relationshipTitleAttribute; + + if (str_contains($relationshipTitleAttribute, ' as ')) { + $relationshipOrderByAttribute = substr($relationshipTitleAttribute, 0, strpos($relationshipTitleAttribute, ' as ')); + } + + $relationshipQuery->orderBy($relationshipQuery->qualifyColumn($relationshipOrderByAttribute)); } if (str_contains($relationshipTitleAttribute, '->')) { From 7f5d2b413c5148ccf5e734b45362ed62114bd516 Mon Sep 17 00:00:00 2001 From: Dan Harrin Date: Tue, 16 Sep 2025 20:44:16 +0100 Subject: [PATCH 2/2] update other places --- packages/forms/src/Components/CheckboxList.php | 8 +++++++- packages/forms/src/Components/Select.php | 8 ++++---- packages/tables/src/Columns/SelectColumn.php | 16 ++++++++++++++-- packages/tables/src/Filters/SelectFilter.php | 16 ++++++++++++++-- 4 files changed, 39 insertions(+), 9 deletions(-) diff --git a/packages/forms/src/Components/CheckboxList.php b/packages/forms/src/Components/CheckboxList.php index 5dd9494bd5..ecc9521b33 100644 --- a/packages/forms/src/Components/CheckboxList.php +++ b/packages/forms/src/Components/CheckboxList.php @@ -149,7 +149,13 @@ class CheckboxList extends Field implements Contracts\CanDisableOptions, Contrac $relationshipTitleAttribute = $component->getRelationshipTitleAttribute(); if (empty($relationshipQuery->getQuery()->orders)) { - $relationshipQuery->orderBy($relationshipQuery->qualifyColumn($relationshipTitleAttribute)); + $relationshipOrderByAttribute = $relationshipTitleAttribute; + + if (str_contains($relationshipOrderByAttribute, ' as ')) { + $relationshipOrderByAttribute = (string) str($relationshipOrderByAttribute)->before(' as '); + } + + $relationshipQuery->orderBy($relationshipQuery->qualifyColumn($relationshipOrderByAttribute)); } if (str_contains($relationshipTitleAttribute, '->')) { diff --git a/packages/forms/src/Components/Select.php b/packages/forms/src/Components/Select.php index 5afac390b8..db27b7c4fc 100644 --- a/packages/forms/src/Components/Select.php +++ b/packages/forms/src/Components/Select.php @@ -799,8 +799,8 @@ class Select extends Field implements Contracts\CanDisableOptions, Contracts\Has if (empty($relationshipQuery->getQuery()->orders)) { $relationshipOrderByAttribute = $relationshipTitleAttribute; - if (str_contains($relationshipTitleAttribute, ' as ')) { - $relationshipOrderByAttribute = substr($relationshipTitleAttribute, 0, strpos($relationshipTitleAttribute, ' as ')); + if (str_contains($relationshipOrderByAttribute, ' as ')) { + $relationshipOrderByAttribute = (string) str($relationshipOrderByAttribute)->before(' as '); } $relationshipQuery->orderBy($relationshipQuery->qualifyColumn($relationshipOrderByAttribute)); @@ -863,8 +863,8 @@ class Select extends Field implements Contracts\CanDisableOptions, Contracts\Has if (empty($relationshipQuery->getQuery()->orders)) { $relationshipOrderByAttribute = $relationshipTitleAttribute; - if (str_contains($relationshipTitleAttribute, ' as ')) { - $relationshipOrderByAttribute = substr($relationshipTitleAttribute, 0, strpos($relationshipTitleAttribute, ' as ')); + if (str_contains($relationshipOrderByAttribute, ' as ')) { + $relationshipOrderByAttribute = (string) str($relationshipOrderByAttribute)->before(' as '); } $relationshipQuery->orderBy($relationshipQuery->qualifyColumn($relationshipOrderByAttribute)); diff --git a/packages/tables/src/Columns/SelectColumn.php b/packages/tables/src/Columns/SelectColumn.php index 94d960c837..9874b7eabf 100644 --- a/packages/tables/src/Columns/SelectColumn.php +++ b/packages/tables/src/Columns/SelectColumn.php @@ -592,7 +592,13 @@ class SelectColumn extends Column implements Editable, HasEmbeddedView $relationshipTitleAttribute = $column->getOptionsRelationshipTitleAttribute(); if (empty($relationshipQuery->getQuery()->orders)) { - $relationshipQuery->orderBy($relationshipQuery->qualifyColumn($relationshipTitleAttribute)); + $relationshipOrderByAttribute = $relationshipTitleAttribute; + + if (str_contains($relationshipOrderByAttribute, ' as ')) { + $relationshipOrderByAttribute = (string) str($relationshipOrderByAttribute)->before(' as '); + } + + $relationshipQuery->orderBy($relationshipQuery->qualifyColumn($relationshipOrderByAttribute)); } if (str_contains($relationshipTitleAttribute, '->')) { @@ -646,7 +652,13 @@ class SelectColumn extends Column implements Editable, HasEmbeddedView $relationshipTitleAttribute = $column->getOptionsRelationshipTitleAttribute(); if (empty($relationshipQuery->getQuery()->orders)) { - $relationshipQuery->orderBy($relationshipQuery->qualifyColumn($relationshipTitleAttribute)); + $relationshipOrderByAttribute = $relationshipTitleAttribute; + + if (str_contains($relationshipOrderByAttribute, ' as ')) { + $relationshipOrderByAttribute = (string) str($relationshipOrderByAttribute)->before(' as '); + } + + $relationshipQuery->orderBy($relationshipQuery->qualifyColumn($relationshipOrderByAttribute)); } if (str_contains($relationshipTitleAttribute, '->')) { diff --git a/packages/tables/src/Filters/SelectFilter.php b/packages/tables/src/Filters/SelectFilter.php index 142d72b736..81fefcc1df 100644 --- a/packages/tables/src/Filters/SelectFilter.php +++ b/packages/tables/src/Filters/SelectFilter.php @@ -367,7 +367,13 @@ class SelectFilter extends BaseFilter $relationshipTitleAttribute = $component->getRelationshipTitleAttribute(); if (empty($relationshipQuery->getQuery()->orders)) { - $relationshipQuery->orderBy($relationshipQuery->qualifyColumn($relationshipTitleAttribute)); + $relationshipOrderByAttribute = $relationshipTitleAttribute; + + if (str_contains($relationshipOrderByAttribute, ' as ')) { + $relationshipOrderByAttribute = (string) str($relationshipOrderByAttribute)->before(' as '); + } + + $relationshipQuery->orderBy($relationshipQuery->qualifyColumn($relationshipOrderByAttribute)); } if (str_contains($relationshipTitleAttribute, '->')) { @@ -427,7 +433,13 @@ class SelectFilter extends BaseFilter $relationshipTitleAttribute = $component->getRelationshipTitleAttribute(); if (empty($relationshipQuery->getQuery()->orders)) { - $relationshipQuery->orderBy($relationshipQuery->qualifyColumn($relationshipTitleAttribute)); + $relationshipOrderByAttribute = $relationshipTitleAttribute; + + if (str_contains($relationshipOrderByAttribute, ' as ')) { + $relationshipOrderByAttribute = (string) str($relationshipOrderByAttribute)->before(' as '); + } + + $relationshipQuery->orderBy($relationshipQuery->qualifyColumn($relationshipOrderByAttribute)); } if (str_contains($relationshipTitleAttribute, '->')) {