Sequelize with GraphQl:如何使用突变更新字段

Posted

技术标签:

【中文标题】Sequelize with GraphQl:如何使用突变更新字段【英文标题】:Sequelize with GraphQl: How to update fields using mutation 【发布时间】: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
  

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

【问题讨论】:

【参考方案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。

【讨论】:

以上是关于Sequelize with GraphQl:如何使用突变更新字段的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jest、Graphql 和 Sequelize 测试数据库时如何避免 EADDRINUSE

如何使用 sequelize 从 graphql 中的映射表中访问数据

使用 Sequelize 在 GraphQL 查询中将日期时间字段输出为字符串

GraphQl,Sequelize-CLi,模型捆绑器 - sequelize.import 不是函数

GraphQL 和 graphql-sequelize-schema-generator

GraphQL 嵌套突变 + Sequelize