Return 更新突变 GraphQL 和 Sequelize 时为空

Return null on update mutation GraphQL and Sequelize

我想知道为什么我执行突变时我的反应是"null"。

我的查询有效:当我执行请求时,状态 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
  }

SOLVED : Migrate MySQL to Postegres to use returning option (only 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;
    });
},

根据Sequelize Documentation

  • create method return 是 Promise<Model>,在你的例子中 return 是匹配 type Sequence.
  • 的东西
  • update method 相反,return 是 Promise<Array<number, number>> 并且不匹配 type Sequence.

The promise returns an array with one or two elements. The first element is always the number of affected rows, while the second element is the actual affected rows (only supported in postgres with options.returning true.)

因此,要么将 updateSequence 的 return 类型更改为与 models.Sequence.update 中的 return 类型相匹配的类型,要么,您必须构建一个匹配的对象type Sequenceupdate.

之后