更新突变GraphQL和Sequelize时返回null

时间:2019-03-29 10:32:30

标签: mysql node.js graphql sequelize.js apollo-server

我想知道为什么在执行突变时我的回答为何为“空”。

我的查询有效:执行请求时,数据库SQL中的is_active状态变为true或false。

创建时,我有一个正确的响应,但没有更新。

Graphql请求:

SELECT * FROM yourTable WHERE id = 1 FOR UPDATE;
SELECT * FROM yourTable WHERE id = 2 FOR UPDATE;

响应:

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

resolvers.js

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

schema.js

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

已解决:将MySQL迁移到Postegres以使用返回选项(仅Postegres)

我迁移数据库以使用Sequelize中的返回选项。

  # 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
  }

1 个答案:

答案 0 :(得分:1)

根据Sequelize Documentation

  • create method返回一个Promise<Model>,在您的情况下,它返回与type Sequence相匹配的内容。
  • update method会返回Promise<Array<number, number>>,但与type Sequence不匹配。
  

promise返回一个包含一个或两个元素的数组。第一个元素始终是受影响的行数,而第二个元素是实际受影响的行(仅在带有options.returning true的postgres中支持)。

因此,要么将updateSequence的返回类型更改为与models.Sequence.update的返回类型相匹配的内容,要么必须在{{1 }}。

希望有帮助。