При построении запросов и мутаций в GraphQL часто целесообразно использовать такой клиент, как GraphiQL, который поможет вам, предоставив документацию, предоставив вам возможности автозаполнения и выделив места, где произошли ошибки.PostGraphile имеет встроенный GraphiQL;он по умолчанию включен в CLI, но если вы используете его в режиме библиотеки, вы должны передать graphiql: true
, чтобы включить его.В любом случае я рекомендую использовать флаги --enhance-graphiql
/ enhanceGraphiql: true
.Если вы возьмете свою мутацию и поместите ее в GraphiQL, она скажет вам, где она пошла не так, и может даже предложить, как ее исправить!
Мне кажется, что ваша мутация немного неправильной формы.PostGraphile следует Спецификации мутаций объекта ввода Relay, что означает, что мы вложили все входные данные мутации в аргумент ввода, как вы это сделали.Тем не менее, мы также группируем детали о записи, чтобы легче было отделять «что» от «как» при выполнении обновлений - например, «что»: authorId: 27, isleId: 93
, «как»: patch: {text: $text}
- это также позволяетвам нужно обновить ключи (например, если вы хотите изменить isleId), что было бы невозможно, если бы все столбцы были вместе.Мне кажется, это та часть, которую вам не хватает.
Я подозреваю, что ваша мутация должна выглядеть примерно так:
mutation BookUpdates(
$borrower_id: Int!, #not really an Int but for the sake of ease.
$author_id: Int!,
$isle_id: Int!,
$is_available: Boolean
) {
updateBookByAuthorIdAndIsleId(input: {
isleId: $isle_id,
authorId: $author_id
bookPatch: {
isAvailable: $is_available,
borrowerId: $borrower_id,
}
}) {
bookEdge {
node {
authorId
}
}
}
Я также camelCase'd имена ваших полей, но есливы загрузили пользовательский инфлектор, это может быть необязательно / нежелательно.