Skip to content

Commit

Permalink
fix(graphql/@sortBy): Possible too long alias name for joined relat…
Browse files Browse the repository at this point in the history
…ion.
  • Loading branch information
LastDragon-ru committed Jan 8, 2024
1 parent e528aec commit 73c87ec
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 19 deletions.
2 changes: 2 additions & 0 deletions packages/graphql/UPGRADE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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__*`.
7 changes: 5 additions & 2 deletions packages/graphql/src/SortBy/Sorters/EloquentSorter.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
43 changes: 26 additions & 17 deletions packages/graphql/src/SortBy/Sorters/EloquentSorterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -129,21 +129,22 @@ static function (): EloquentBuilder {
order by
(
select
"sort_by_organization"."name"
"lara_asp_graphql__sort_by__0__relation_0"."name"
from
"users"
inner join (
select
*
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
Expand All @@ -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 (
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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"
Expand All @@ -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
Expand All @@ -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"
Expand All @@ -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
Expand Down

0 comments on commit 73c87ec

Please sign in to comment.