Обновите значение столбца в таблице Postgres, используя мутацию Graphql - PullRequest
0 голосов
/ 26 февраля 2019

Basic info: использование Postgres в бэкэнде и GraphQL во внешнем интерфейсе с использованием Postgraphile.

Need: использование мутации GraphQL для обновления строки в БД Postgres.

Code: Предположим, у меня есть схема library_account с таблицей книг в Postgres, в которой есть поля, такие как id, title, loaner_id и is_available.

Scenario: Это заимствовано в первый раз.

Proposed flow: сделать мутацию GraphQL для обновления таблицы Postgres с помощью заемщика_ид.

Код, который я сейчас использую:

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 Ответ

0 голосов
/ 27 февраля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...