Обновите значение столбца в таблице Postgres, используя мутацию Graphql
Basic info
: использование Postgres в бэкэнде и GraphQL во внешнем интерфейсе с использованием Postgraphile.
Need
: Используйте мутацию GraphQL для обновления строки в базе данных Postgres.
Code
Предположим, у меня есть схема library_account, в которой есть таблица книг в Postgres, в которой есть поля, такие как id, title, loaner_id и is_available.
Scenario
Это заимствовано в первый раз.
Proposed flow
: сделать мутацию GraphQL, чтобы обновить таблицу Postgres с помощью loaner_id.
Код, который я сейчас использую:
mutation BookUpdates(
$title: String,
$borrower_id: Int!, #not really an Int but for the sake of ease.
$author_id: Int!,
$isle_id: Int!,
$is_available: Boolean
) {
updateBookByAuthorIdAndIsleId(input: {
isle_id: $isle_id,
is_available: $is_available,
borrower_id: $borrower_id,
author_id: $author_id
}) {
bookEdge {
node {
author_id
}
}
}
Здесь я получаю сообщение об ошибке для borrower_id
который говорит, что заемщик_ид не определяется по типу updateBookByAuthorIdAndIsleId
,
Какие-либо предложения??
1 ответ
При построении запросов и мутаций в 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 имена ваших полей, но если вы загрузили пользовательский инфлектор, это может быть необязательным / нежелательным.