2017-02-09 3 views
3

こんにちは私のhttps://www.graph.cool/ dbに変異を持つデータを書き込もうとしています。 私のプロジェクトはReact web-appであり、Apolloをgraphqlクライアント、graphql-tag npmパッケージをテンプレートリテラルパーサーとして使用しています。1つの突然変異で入れ子にされたノードを作成するには?

問題は、ネストされたデータを持つ正しい突然変異のためにgqlテンプレート文字列を配置する方法がわかりません。 スキーマは次のようになります。たとえば、 "Company"タイプのフィールド "Addresses"が "Address"オブジェクトタイプの配列であることに注意してください。例えば

type Company { 
    name: String! 
    website: String 
    Owner: User 
    Addresses: [Addresses] 
} 

type User { 
    name: String! 
    email: String 
} 

type Address { 
    street: String! 
    city: String! 
    country: String 
    contacts: [Contact] 
} 

type Contact { 
    name: String 
    email: String 
    phone: String 
} 

、私は1つの変異で同時に新会社、その新しい所有者と複数のアドレスを作成します。アドレスについては、新しい連絡先を作成する必要があります。

答えて

10

これを達成するために、ネストされた突然変異を使用することができます。まず 、我々はGraphiQLの遊び場からそれを行うことができます方法を見てみましょう:createCompany変異は、オブジェクト引数ownerとリストオブジェクト引数addressesを持っていることを

mutation createNestedCompany { 
    createCompany(
    owner: { 
     name: "Mickey" 
     email: "[email protected]" 
    } 
    addresses: [{ 
     street: "A street" 
     city: "A city" 
     country: "A country" 
     contacts: [{ 
     name: "Mickey" 
     email: "[email protected]" 
     phone: "+1 23456789" 
     }] 
    }, { 
     street: "B street" 
     city: "B city" 
     country: "B country" 
     contacts: [{ 
     name: "Minney" 
     email: "[email protected]" 
     phone: "+9 87654321" 
     }] 
    }] 
) { 
    id 
    owner { 
     id 
    } 
    addresses { 
     id 
     contacts { 
     id 
     } 
    } 
    } 
} 

注意。 addressesには、ネストされたcontactsリストオブジェクトの引数があります。アポロクライアントを使用し

、我々はGraphQL変数を入力引数を指定し、その者は、それがこのケースでどのように見えるかを見てみましょう:

const createNestedCompany = gql` 
    mutation createNestedCompany(
    $owner: CompanyownerUser 
    $addresses: [CompanyaddressesAddress!] 
) { 
    createCompany(
     owner: $owner 
     addresses: $addresses 
    ) { 
     id 
     owner { 
     id 
     } 
     addresses { 
     id 
     contacts { 
      id 
     } 
     } 
    } 
    } 
` 

アポロとの突然変異を呼び出すとき、私たちは今、オブジェクトとして変数を指定する必要があります:

const variables = { 
    owner: { 
    name: "Mickey" 
    email: "[email protected]" 
    }, 
    addresses: [{ 
    street: "A street" 
    city: "A city" 
    country: "A country" 
    contacts: [{ 
     name: "Mickey" 
     email: "[email protected]" 
     phone: "+1 23456789" 
    }] 
    }, { 
    street: "A street" 
    city: "A city" 
    country: "A country" 
    contacts: [{ 
     name: "Minney" 
     email: "[email protected]" 
     phone: "+9 87654321" 
    }] 
    }] 
} 

と変数との変異を呼び出します。

this.props.createNestedCompany({ variables }) 
    .then((response) => { 
    console.log('Company, owner and addresses plus contacts created'); 
    }).catch((e) => { 
    console.error(e) 
    }) 

変数タイプCompanyownerUserおよび[CompanyaddressesAddress!]は、の多重度(to-one;対多)、関連モデルCompanyUser; CompanyAddress)と関連分野owner; addresses)。 createCompany突然変異にナビゲートすると、GraphiQLプレイグラウンドのすべてのタイプ名を見つけることができます。

関連する問題