Работаю вот с этой библиотекой:
https://github.com/webonyx/graphql-php, а точнее учусь с ней работать.
Организовал небольшой пример:
Запрос{
Record(id: "7", alias: "test") {
id,
alias
}
}
Схема...
$contentType = new ObjectType([
'name' => 'Content',
'description' => 'Информационная сущность.',
'fields' => [
'id' => [
'type' => new NonNull(Type::string()),
'description' => 'Уникальный идентификатор',
],
'alias' => [
'type' => Type::string(),
'description' => 'Альтернативное уникальное именование',
],
'visible' => [
'type' => Type::boolean(),
'description' => 'Статус отображения',
],
...
],
]);
$queryType = new ObjectType([
'name' => 'Query',
'fields' => [
'Record' => [
'type' => $contentType,
'args' => [
'id' => Type::string(),
'alias' => Type::string(),
],
'resolve' => function ($root, $args) {
return [
'id' => '1',
'alias' => 'alias',
'visible' => true,
'title' => 'Заголовок',
'short_text' => 'Короткое описание',
'full_text' => 'Подробное описание',
'secret' => 'Секрет',
];
},
],
],
]);
...
Все работает, все хорошо. Однако, как я понял в 'resolve' я должен сделать запрос на получение данных, это можно увидеть в тестах:
https://github.com/webonyx/graphql-php/blob/master...
Все-бы хорошо, но если клиент запрашивает, к примеру, только id и alias, то мне нет необходимости доставать все данные включая реляции и тп. Я понимаю, что при выводе они показаны не будут, однако запрос на них все-равно пойдет. Было бы не плохо получить список полей (id, alias), которые я запрашиваю в 'resolve', чтобы построить оптимальный запрос.
Подскажите пожалуйста как это можно сделать?
П.С. Интересует, что-то такое:
$queryType = new ObjectType([
'name' => 'Query',
'fields' => [
'Record' => [
'type' => $contentType,
'args' => [
'id' => Type::string(),
'alias' => Type::string(),
],
'resolve' => function ($root, $args) {
// тут получаем список запрашиваемых полей для Record. В нашем случае id и alias
// формируем оптимальный запрос
},
],
],
]);