我使用了一堆koa2,sequelize和graphql。我不想使用graphql变异更改用户模型的状态字段并返回更改的对象。
目前我的突变看起来像这样:
mutation: new GraphQLObjectType({
name: 'Mutation',
fields: {
setState: {
type: userType,
args: {
input: {
type: userStateInputType
}
},
resolve: resolver(db.user, {
before: async (findOptions, {input}) => {
const {uuid, state} = input;
await db.user.update(
{state},
{where: {uuid}}
);
findOptions.where = {
uuid
};
return findOptions;
}
})
}
}
})
那是相应的查询:
mutation setstate{
setState(input: {uuid: "..UUID..", state: "STATE"}) {
uuid
state
}
}
它正在运作,但我很确定有更好的解决方案。
答案 0 :(得分:2)
我会避免尝试使用graphql-sequelize的resolver
助手来进行变异。查看该库的源代码,看起来它只是用于解析查询和类型。
我认为更清洁的做法就是做这样的事情:
resolve: async (obj, { input: { uuid, state } }) => {
const user = await db.user.findById(uuid)
user.set('state', state)
return user.save()
}
我在此避免使用update()
,因为它只会返回受影响的字段。如果你决定扩展变异返回的字段,这样你就可以返回整个用户对象并避免为某些字段返回null。