2017-08-01 40 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。

相關問題