首页 文章

使用GraphQl进行Sequelize:如何使用变异更新字段

提问于
浏览
0

我正在使用一堆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
  }
}

它有效,但我很确定有更好的解决方案 .

1 回答

  • 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 .

相关问题