Я получаю эту ошибку при попытке запроса типа и потомка:
"Fragment cannot be spread here as objects of type \"AppTestObject\" can never be of type \"AppTestChild\"."
Я установил тестовую установку, используя recipe-core, admin, graphql и graphql-devtools (все последние версии), чтобы протестировать это в базовой настройке. Я создал 2 объекта:
class TestObject extends DataObject {
private static $singular_name = "Test Object";
private static $plural_name = "Test Objects";
private static $table_name = "TestObject";
private static $db = [
'Title' => 'Varchar(255)'
];
}
class TestChild extends DataObject {
private static $singular_name = "Test Child";
private static $plural_name = "Test Children";
private static $table_name = "TestChild";
private static $db = [
'Title' => 'Varchar(255)'
];
}
И настройте простые леса через конфигурацию:
SilverStripe\GraphQL\Controller:
schema:
scaffolding:
types:
App\TestObject:
fields: [ID]
operations:
read: true
App\TestChild:
fields: [ID, Title]
operations:
read: true
Я могу запросить каждый из этих типов по отдельности без каких-либо проблем. Но когда я пытаюсь получить TestChild
в качестве потомка TestObject
, я получаю ошибку выше. Вот пример моего запроса:
query {
readAppTestObjects {
edges {
node {
...on AppTestChild {
Title
}
}
}
}
}
Проверяя документацию для схемы в graphiql, в readAppTestObjects
нет ссылок на потомков, хотя в документации для silverstripe / graphql говорится:
При чтении типов, которые имеют открытых потомков (например, чтение страницы, когда RedirectorPage также отображается), возвращаемый тип представляет собой объединение базового типа и всех открытых потомков. Этот тип объединения принимает имя {BaseType} WithDescendants.