2017-10-02 7 views
0

さまざまなフィールドを持つタイプのGraphQLスキーマを指定しようとしており、同じ引数を使用してOR: [...]を再帰的にタックすることもできます。私はそれは素晴らしい作品。このGraphQL - スプレッド入力args

input BookFilters { 
    _id: String 
    title: String 
    title_contains: String 
    title_startsWith: String 
    title_endsWith: String 
    OR: [BookFilters] 
} 

type Query { 
    allBooks(_id: String 
    title: String 
    title_contains: String 
    title_startsWith: String 
    title_endsWith: String 
    OR: [BookFilters] 
    ): [Book] 
} 

のように働いてんだ、このクエリ

{ 
    allBooks(title_endsWith: "1", OR: [{ title: "2" }, {title:"3"}, {OR: [{title_contains: "Q"}, {OR:[{title:"Q"}]}]}]) { 
    _id 
    title 
    } 
} 

はうまく通過します。

私の質問は、重複を削除するいくつかの方法はありますか?理想的には、私はそれが大好きです

type Query { 
    allBooks(...BookFilters): [Book] 
} 

が有効ですが、そうではありません。


編集 - コメントが断片を持ち出しました。彼らはの型から外れてと宣言できますか?だから私はまだ私のすべてのクエリの引数をリストし、それからフラグメントを作る、すべてのフィールドを再一覧表示する新しいタイプを作るだろうか?

それでもそうでないとしても、GraphQLはまだ入力引数に広がっているようには見えません。私たちは、プレーンJSからスキーマの代わりに、クエリ言語を構築し、私たちの引数は、プレーン古いjavascriptの-オブジェクトであるため、スプレッドを使用することができます...

+0

これは、断片のことを思い出します。これをチェックしてください:http://dev.apollodata.com/react/fragments.html – agm1984

+0

ごめんなさい。アポロ、あなたがそれを使用している場合、バニラのドキュメントをチェックしてください。 – agm1984

+1

ええ - 私は断片を見た。彼らはTypeで宣言されているだけですが、そうですか?それにもかかわらず、私は依然としてクエリ引数にフラグメントを広げることはできないようです。 –

答えて

0

上のエラーアウト

fragment BookFiltersFragment on BookFilters { 
    _id 
} 

type Query { 
    allBooks(...BookFiltersFragment): [Book] 
} 

。私は、 "GraphQLInputType"は簡単に拡散することができない本格的なインスタンス化だと信じています。

0

フラグメントの広がりが引数として何をしたいのか分かりませんので、私はそれについてコメントすることはできません。

input BookFilter { 
    _id: String 
    title: String 
    title_contains: String 
    title_startsWith: String 
    title_endsWith: String 
    OR: [BookFilter] 
    AND: [BookFilter] 
} 

type Query { 
    bookSearch(filter: BookFilter): [Book] 
} 

は次に、あなたが行うことができます:それは、残りのパラメータことになっている場合は、私は、これは重複を避けるために、より良いと思いANDOR

{ 
    allBooks({ AND: [ 
    {title_endsWith: "1"} 
    {OR: [ 
     {title_startsWith:"2"}, 
     {title_startsWith:"3"} 
    ]} 
    ]} { 
    _id 
    title 
    } 
} 

オプションをあなたが作ることができるでしょう論理ツリー。上記のクエリは、21と31では一致しますが、22と41では一致しません。

+0

それが実際に動作しませんので:('{ { allBooks(タイトル: "A")。{ タイトル _id} は}' "未知の引数のタイトル" エラーがスローされ、単一の引数、 'フィルタがあるとすれば'、それはクエリが'ことを期待{ allBooks(フィルター:{タイトル: "A"}){ タイトル _id} } '私はしたくないもちろん、私は引数を取得したいです。 –

+0

ああ、また試みた{ allBooks({タイトル: "a"}){ _id タイトル } } '(タイトルはオブジェクトリテラルにラップされていますが)無効であるようです。 –

関連する問題