2016-11-19 13 views
1

は、私が取得するためにGraphQLスキーマを照会する場合、私は、MemberType する必要があります/ネストされたリゾルバのデータを変更できますか?

このような
import { 
    GraphQLID, 
    GraphQLList, 
    GraphQLNonNull, 
    GraphQLObjectType, 
    GraphQLString 
} from 'graphql' 
import readPhoneNumbersByMemberId from '../resolvers/readPhoneNumbersByMemberId' 
import PhoneNumberType from './PhoneNumberType' 

const MemberType = new GraphQLObjectType({ 
    name: 'Member', 
    fields: { 
    id: { 
     type: new GraphQLNonNull(GraphQLID) 
    }, 
    firstName: { 
     type: new GraphQLNonNull(GraphQLString) 
    }, 
    lastName: { 
     type: new GraphQLNonNull(GraphQLString) 
    }, 
    phoneNumbers: { 
     type: new GraphQLList(PhoneNumberType), 
     resolve: readPhoneNumbersByMemberId 
    } 
    } 
}) 

export default MemberType 

PhoneNumberType

このような
import { 
    GraphQLNonNull, 
    GraphQLObjectType, 
    GraphQLString 
} from 'graphql' 

const PhoneNumberType = new GraphQLObjectType({ 
    name: 'PhoneNumber', 
    fields: { 
    value: { 
     type: new GraphQLNonNull(GraphQLString) 
    } 
    } 
}) 

export default PhoneNumberType 

と今QueryType

このような
const QueryType = new GraphQLObjectType({ 
    name: 'Query', 
    fields: { 
    readMembers: { 
     type: new GraphQLList(MemberType), 
     resolve: readMembers 
    } 
    } 
}) 

を持っていると言いますメンバー、解決機能readMembersおよびreadPhoneNumbersByMemberIdが呼び出されますソースからデータをフェッチする。

突然変異に同じメカニズムを使用することは可能ですか?

+0

突然変異のリゾルバと同じリゾルバロジックを使用することを意味しますか? – davidyaha

+0

同じ「リゾルバカスケード」を利用して作成/更新文を実行することは可能ですか? –

+0

ルートリゾルバですべての作成/更新文を実行する必要がありますか? –

答えて

1

以外にも、は使用できません。フィールドリゾルバは実際にデータを取得するように作られています。ネストされたリゾルバの内部に作成/更新/削除ロジックを置くことは、すぐに問題になり、graphqlで解決したいのと同じ問題を引き起こす可能性があります。

フェイスブックは、突然変異(またはクエリ)の引数として送信されたコンポジットオブジェクトに対して、inputという特殊なタイプを作成してしまいました。

もしあなたが突然変異ロジックを分割することのメリットを説明できるならば、同じフィールドネストされた性質を達成しながら突然変異ロジックを分離したままにするこの方法で、すべてのフィールドに対して突然変異関数を受け入れることはGraphQL仕様の良いRFCかもしれません。

これを試したい場合は、返されたオブジェクトのactionフィールドをルートリゾルバから返すだけで、そのフィールドが表示されている場合のみネストされたリゾルバに必要な変更を加えることができます。ネストされたリゾルバで変更されたデータが返されていることを確認してください。

+0

ご返信ありがとうございます。私はreadPhoneNumbersByMemberIdが突然変異の後に電話番号を取得することを知っていますが、mutatePhoneNumbersByMemberIdを使用してネストされた型に作成/更新操作をさせることができるかどうかを知りたいと思います。 –

+0

私は試みましたが、私はすべての作成/更新ロジックをルートリゾルバに実装する必要があるようです。 –

+1

ああ、私は今理解しています。 'phoneNumbersByMemberId'に伝播されるアクションフラグで動作させることもできますが、それはお勧めできません。ルートリゾルバに突然変異ロジックを作成し、ネストされた型リゾルバがデータ検索のみを処理するようにする必要があります。質問を「変更するには:ネストされたリゾルバのデータを変更できますか?」に変更してください。私はそれに答えますので、将来の開発者が同じことを尋ねるためには保たれます。 – davidyaha

関連する問題