【问题标题】:Sequelize with GraphQl: How to update fields using mutationSequelize with GraphQl:如何使用突变更新字段
【发布时间】:2018-01-08 02:55:13
【问题描述】:

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

它正在工作,但我很确定有更好的解决方案。

【问题讨论】:

    标签: node.js sequelize.js graphql


    【解决方案1】:

    我会避免尝试使用 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。

    【讨论】:

      猜你喜欢
      • 2019-08-20
      • 2018-08-24
      • 2019-05-22
      • 2021-12-02
      • 2018-04-30
      • 2020-05-30
      • 2020-05-16
      • 2020-05-30
      • 2019-05-24
      相关资源
      最近更新 更多