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;
});
},
-
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 Sequence
在 update
.
之后
我想知道为什么我执行突变时我的反应是"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;
});
},
-
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 Sequence
在 update
.