From 73c87ec8c035877a7be10b71dd4e7c45e46e2d54 Mon Sep 17 00:00:00 2001 From: Aleksei Lebedev <1329824+LastDragon-ru@users.noreply.github.com> Date: Mon, 8 Jan 2024 14:30:28 +0400 Subject: [PATCH] fix(graphql/`@sortBy`): Possible too long alias name for joined relation. --- packages/graphql/UPGRADE.md | 2 + .../src/SortBy/Sorters/EloquentSorter.php | 7 ++- .../src/SortBy/Sorters/EloquentSorterTest.php | 43 +++++++++++-------- 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/packages/graphql/UPGRADE.md b/packages/graphql/UPGRADE.md index 2d9617e5f..d95164f28 100644 --- a/packages/graphql/UPGRADE.md +++ b/packages/graphql/UPGRADE.md @@ -52,3 +52,5 @@ Please also see [changelog](https://github.com/LastDragon-ru/lara-asp/releases) * [ ] `LastDragon_ru\LaraASP\GraphQL\SortBy\Builders\*` => `LastDragon_ru\LaraASP\GraphQL\SortBy\Sorters\*`. * [ ] Update `LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeDefinition` implementations. + +* [ ] If you are testing generated queries, you need to update `sort_by_*` alias to `lara_asp_graphql__sort_by__*`. diff --git a/packages/graphql/src/SortBy/Sorters/EloquentSorter.php b/packages/graphql/src/SortBy/Sorters/EloquentSorter.php index d82981bed..d086dc60a 100644 --- a/packages/graphql/src/SortBy/Sorters/EloquentSorter.php +++ b/packages/graphql/src/SortBy/Sorters/EloquentSorter.php @@ -90,14 +90,17 @@ protected function getRelationColumn( ->mergeConstraintsFrom($relation->getQuery()); $alias = $related->getTable(); $stack = [$root]; - $current = 'sort_by'; + $index = 0; + $prefix = $this->getAlias($builder); foreach ($relations as $name) { $stack[] = $name; - $current = "{$current}_{$name}"; + $current = "{$prefix}__relation_{$index}"; $relation = $this->getRelation($relation->getRelated()->newQuery(), $name, $stack); $query = $this->joinRelation($query, $relation, $alias, $current); $alias = $current; + + $index++; } // We need only one row diff --git a/packages/graphql/src/SortBy/Sorters/EloquentSorterTest.php b/packages/graphql/src/SortBy/Sorters/EloquentSorterTest.php index e29fa1c54..981608ed3 100644 --- a/packages/graphql/src/SortBy/Sorters/EloquentSorterTest.php +++ b/packages/graphql/src/SortBy/Sorters/EloquentSorterTest.php @@ -129,7 +129,7 @@ static function (): EloquentBuilder { order by ( select - "sort_by_organization"."name" + "lara_asp_graphql__sort_by__0__relation_0"."name" from "users" inner join ( @@ -137,13 +137,14 @@ static function (): EloquentBuilder { * from "organizations" - ) as "sort_by_organization" - on "sort_by_organization"."ownerKey" = "users"."foreignKey" + ) as "lara_asp_graphql__sort_by__0__relation_0" + on "lara_asp_graphql__sort_by__0__relation_0"."ownerKey" + = "users"."foreignKey" where "cars"."foreignKey" = "users"."ownerKey" and "deleted_at" is null order by - "sort_by_organization"."name" desc + "lara_asp_graphql__sort_by__0__relation_0"."name" desc limit 1 ) desc @@ -169,7 +170,7 @@ static function (): EloquentBuilder { order by ( select - "sort_by_engine"."id" + "lara_asp_graphql__sort_by__0__relation_0"."id" from "cars" inner join ( @@ -179,12 +180,14 @@ static function (): EloquentBuilder { "car_engines" where "installed" = ? - ) as "sort_by_engine" on "sort_by_engine"."foreignKey" = "cars"."localKey" + ) as "lara_asp_graphql__sort_by__0__relation_0" + on "lara_asp_graphql__sort_by__0__relation_0"."foreignKey" + = "cars"."localKey" where "users"."localKey" = "cars"."foreignKey" and "favorite" = ? order by - "sort_by_engine"."id" asc + "lara_asp_graphql__sort_by__0__relation_0"."id" asc limit 1 ) asc @@ -278,24 +281,26 @@ static function (): EloquentBuilder { order by ( select - "sort_by_user"."name" + "lara_asp_graphql__sort_by__0__relation_0"."name" from "roles" inner join "user_roles" on "user_roles"."secondLocalKey" = "roles"."secondKey" inner join ( select - "user_roles"."id" as "sort_by_user_key", + "user_roles"."id" as "lara_asp_graphql__sort_by__0__relation_0_key", "users".* from "users" inner join "user_roles" on "user_roles"."secondLocalKey" = "users"."secondKey" - ) as "sort_by_user" on "sort_by_user"."sort_by_user_key" = "roles"."localKey" + ) as "lara_asp_graphql__sort_by__0__relation_0" + on "lara_asp_graphql__sort_by__0__relation_0" + ."lara_asp_graphql__sort_by__0__relation_0_key" = "roles"."localKey" where "users"."localKey" = "user_roles"."firstKey" and "deleted_at" is null order by - "sort_by_user"."name" desc + "lara_asp_graphql__sort_by__0__relation_0"."name" desc limit 1 ) desc @@ -321,7 +326,7 @@ static function (): EloquentBuilder { order by ( select - "sort_by_users"."name" + "lara_asp_graphql__sort_by__0__relation_0"."name" from "roles" inner join "user_roles" on "roles"."relatedKey" = "user_roles"."relatedPivotKey" @@ -334,12 +339,14 @@ static function (): EloquentBuilder { on "users"."relatedKey" = "user_roles"."relatedPivotKey" where "deleted_at" is null - ) as "sort_by_users" on "sort_by_users"."parentKey" = "roles"."relatedKey" + ) as "lara_asp_graphql__sort_by__0__relation_0" + on "lara_asp_graphql__sort_by__0__relation_0" + ."parentKey" = "roles"."relatedKey" where "users"."parentKey" = "user_roles"."foreignPivotKey" and "deleted_at" is null order by - "sort_by_users"."name" desc + "lara_asp_graphql__sort_by__0__relation_0"."name" desc limit 1 ) desc @@ -365,7 +372,7 @@ static function (): EloquentBuilder { order by ( select - "sort_by_users"."name" + "lara_asp_graphql__sort_by__0__relation_0"."name" from "tags" inner join "taggables" on "tags"."relatedKey" = "taggables"."relatedPivotKey" @@ -376,12 +383,14 @@ static function (): EloquentBuilder { "users" inner join "taggables" on "users"."relatedKey" = "taggables"."relatedPivotKey" - ) as "sort_by_users" on "sort_by_users"."parentKey" = "tags"."relatedKey" + ) as "lara_asp_graphql__sort_by__0__relation_0" + on "lara_asp_graphql__sort_by__0__relation_0" + ."parentKey" = "tags"."relatedKey" where "users"."parentKey" = "taggables"."foreignPivotKey" and "taggables"."taggable_type" = ? order by - "sort_by_users"."name" asc + "lara_asp_graphql__sort_by__0__relation_0"."name" asc limit 1 ) asc