Skip to content

Support grouping by multiple fields with @indexBy directive#1

Merged
ruudk merged 1 commit intomainfrom
index-by-multiple-fields
Aug 27, 2025
Merged

Support grouping by multiple fields with @indexBy directive#1
ruudk merged 1 commit intomainfrom
index-by-multiple-fields

Conversation

@ruudk
Copy link
Owner

@ruudk ruudk commented Aug 27, 2025

{
   customers {
        edges @indexBy(field: "node.id,node.name") {
            node {
                id
                name
            }
        }
    }
}

Generates the following code:

/**
 * @var array<int,array<string,CustomerEdge>>
 */
public array $edges {
    get => $this->edges ??= (function() {
        $result = [];
        foreach ($this->data['edges'] as $item) {
            $result[$item['node']['id']][$item['node']['name']] = new CustomerEdge($item);
        }
        return $result;
    })();
}

```graphql
{
   customers {
        edges @indexby(field: "node.id,node.name") {
            node {
                id
                name
            }
        }
    }
}
```

Generates the following code:
```php
/**
 * @var array<int,array<string,CustomerEdge>>
 */
public array $edges {
    get => $this->edges ??= (function() {
        $result = [];
        foreach ($this->data['edges'] as $item) {
            $result[$item['node']['id']][$item['node']['name']] = new CustomerEdge($item);
        }
        return $result;
    })();
}
```
@ruudk ruudk merged commit 9af8807 into main Aug 27, 2025
1 check passed
@ruudk ruudk deleted the index-by-multiple-fields branch August 27, 2025 12:48
shahinataei-ts added a commit to shahinataei-ts/graphql-client-code-generator that referenced this pull request Dec 16, 2025
When processing ListOfType in mapGraphQLTypeToPHPType, the $builtInOnly
parameter was incorrectly passed as the second argument ($nullable)
instead of the third argument ($builtInOnly).

This caused the $builtInOnly parameter to default to false when
processing list items, resulting in the PHP mapped type being used
instead of the primitive JSON type in $data parameter docblocks.

Example of the bug:
- GraphQL: currencies: [Currency!]!
- Config: withScalar('Currency', Type::string(), Type::object(Currency::class))
- Generated docblock: 'currencies': list<Currency>  (wrong)
- Should be: 'currencies': list<string>  (correct)

This caused PHPStan errors like:
"Parameter ruudk#1 $code of class Money\Currency constructor expects
non-empty-string, Money\Currency given."
shahinataei-ts added a commit to shahinataei-ts/graphql-client-code-generator that referenced this pull request Dec 16, 2025
When processing ListOfType in mapGraphQLTypeToPHPType, the $builtInOnly
parameter was incorrectly passed as the second argument ($nullable)
instead of the third argument ($builtInOnly).

This caused the $builtInOnly parameter to default to false when
processing list items, resulting in the PHP mapped type being used
instead of the primitive JSON type in $data parameter docblocks.

Example of the bug:
- GraphQL: currencies: [Currency!]!
- Config: withScalar('Currency', Type::string(), Type::object(Currency::class))
- Generated docblock: 'currencies': list<Currency>  (wrong)
- Should be: 'currencies': list<string>  (correct)

This caused PHPStan errors like:
"Parameter ruudk#1 $code of class Money\Currency constructor expects
non-empty-string, Money\Currency given."
ruudk pushed a commit that referenced this pull request Dec 16, 2025
When processing ListOfType in mapGraphQLTypeToPHPType, the $builtInOnly
parameter was incorrectly passed as the second argument ($nullable)
instead of the third argument ($builtInOnly).

This caused the $builtInOnly parameter to default to false when
processing list items, resulting in the PHP mapped type being used
instead of the primitive JSON type in $data parameter docblocks.

Example of the bug:
- GraphQL: currencies: [Currency!]!
- Config: withScalar('Currency', Type::string(), Type::object(Currency::class))
- Generated docblock: 'currencies': list<Currency>  (wrong)
- Should be: 'currencies': list<string>  (correct)

This caused PHPStan errors like:
"Parameter #1 $code of class Money\Currency constructor expects
non-empty-string, Money\Currency given."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant