2017-08-01 80 views
0

我使用了koa2,sequelize和graphql的堆栈。我不想使用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。

相关问题