php-graphql-client
php-graphql-client copied to clipboard
Printing raw query for debugging
Hi! Given a populated Query or QueryBuilder object, is it possible to print the raw query that generated the request? E.G.:
$builder = (new QueryBuilder('pokemon'))
->setArgument('name', 'Pikachu')
->selectField('id')
->selectField('name')
->selectField(
(new QueryBuilder('attacks'))
->selectField(
(new QueryBuilder('special'))
->selectField('name')
->selectField('type')
->selectField('damage')
)
)
->selectField(
(new QueryBuilder('evolutions'))
->selectField('id')
->selectField('name')
->selectField('number')
->selectField(
(new QueryBuilder('attacks'))
->selectField(
(new QueryBuilder('fast'))
->selectField('name')
->selectField('type')
->selectField('damage')
)
)
);
try {
$results = $client->runQuery($builder);
}
catch (QueryError $exception) {
var_dump($builder->getRawQuery()); // <<<< THIS
print_r($exception->getErrorDetails());
exit;
}
This would be very useful when something goes wrong and you need the raw query to test it on a GraphQL desktop client (Altair in my case). Thanks!
I think you can achieve this easily with this command:
$builder->__toString();
I'm afraid that command will just print the graphical representation of the PHP class, not the GraphQL code we can use in an external tool.
No i tested this. it shows the current query generated by your builder. Just give it a try.
I got this error:
PHP Fatal error: Uncaught Error: Call to undefined method GraphQL\QueryBuilder\QueryBuilder::__toString()
I see because you are using QueryBuilder. This is an example i'm using right now:
$gql = (new Query('page'))
->setArguments(['where' => new RawObject('{id: "'.$id.'"}')])
->setSelectionSet(
[
'title',
'publishedAt',
'updatedAt',
(new Query('content'))->setSelectionSet(['html']),
(new Query('seo'))
->setSelectionSet(
[
'title',
'description',
'noIndex',
(new Query('image'))->setSelectionSet(['url'])
]
)
]
);
dd($gql->__toString());
Yeah I am using QueryBuilder widely in my setup, so I'd need this feature for QueryBuilder as well. Of course it's a "nice to have". ;)
You could just get the query from the query builder? Like so?
catch (QueryError $exception) {
var_dump((string) $builder->getQuery()); // ...or __toString like suggested. I like this way though
print_r($exception->getErrorDetails());
exit;
}