2017-08-01 7 views
0

私はkoa2、sequelize、graphqlのスタックを使用しています。私はgraphqlの突然変異を使用してユーザーモデルの状態フィールドを変更し、変更されたオブジェクトを返すことを望んでいませんでした。GraphQlでSequelize:突然変異を使ってフィールドを更新するには

現在、私の変異は、次のようになります。

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ヘルパーを使用しようとしないでください。そのライブラリのソースを調べると、実際にはクエリと型を解決するためだけのものだと思われます。

は、私は非常にクリーンなアプローチは、ちょうどこのような何かをするだろうと思う。それが唯一の影響を受けたフィールドを返しますので、私は避けここ update()を使用してい

resolve: async (obj, { input: { uuid, state } }) => { 
    const user = await db.user.findById(uuid) 
    user.set('state', state) 
    return user.save() 
} 

。あなたが突然変異によって返されたフィールドを拡張することを決定した場合、この方法で、ユーザーオブジェクト全体を返し、いくつかのフィールドでnullを返さないようにします。

関連する問題