Вернуть ноль при обновлении мутации GraphQL и Sequelize - PullRequest
0 голосов
/ 29 марта 2019

Я хотел бы знать, почему мой ответ "нулевой", когда я выполняю свою мутацию, пожалуйста.

Мой запрос работает: состояние is_active становится истинным или ложным в базе данных SQL, когда я выполняю запрос.

При создании я получаю правильный ответ, но не при обновлении.

Запрос Graphql:

mutation {
  updateSequence(id: 4, , input: {is_active: true}) {
  is_active
  }
}

Ответ:

{
  "data": {
    "updateSequence": {
      "is_active": null
    }
  }
}

resolvers.js

Mutation    : {
    createSequence(_, {input}) {
        return models.Sequence.create(input);
    },
    updateSequence(_, {id, input}) {
        return models.Sequence.update(input, {where: {id: id}});
    }
}

schema.js

  # Sequence
  type Sequence {
    id: Int!,
    code: String,
    buckets: [Bucket],
    sequence_types : [SequenceType]
    is_active: Boolean,
  }

  # SequenceInput
  input SequenceInput {
    is_active: Boolean
  }

  ...

  type Query {
    sequences: [Sequence]
    sequence(id: Int): Sequence
  }

  type Mutation {
    createSequence(input: SequenceInput): Sequence,
    updateSequence(id: ID!, input: SequenceInput): Sequence
  } 

  schema {
    query: Query,
    mutation: Mutation
  }

решено: перенести MySQL в Postegres для использования опции возврата (только Postegres)

Я переношу свою базу данных, чтобы использовать опцию возврата из Sequelize.

createSequence(_, {input}) {
     return models.Sequence.create(input);
},
updateSequence(_, {id, input}) {
    return models.Sequence.update(input, {where: {id: id}, returning: true}).then((sequence) => {
        return sequence[1][0].dataValues;
    });
},

1 Ответ

1 голос
/ 29 марта 2019

Согласно документации Sequelize :

  • Метод create возвращает Promise<Model>, в вашем случае он возвращает то, что соответствует type Sequence.
  • Вместо этого update метод возвращает Promise<Array<number, number>>, что не соответствует type Sequence.

Обещание возвращаетсямассив с одним или двумя элементами.Первый элемент - это всегда количество затронутых строк, а второй элемент - это действительные затронутые строки (поддерживается только в postgres с параметрами option.returning true.)

Так что вы можете изменить тип возвращаемого значения updateSequence во что-то, совпадающее с типом возврата из models.Sequence.update, ИЛИ, вы должны построить объект, который соответствует type Sequence после update.

Надеюсь, это поможет.

...