Обновите значение столбца в таблице 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 имена ваших полей, но если вы загрузили пользовательский инфлектор, это может быть необязательным / нежелательным.

Другие вопросы по тегам