2017-02-20 4 views
0

はここGraphQLスキーマの特急アプリケーションからの私のコードです: - それは正しいタイプを使用して格納することができるように GraphQLスキーマでは、GraphQLIntだけでなくGraphQLStringもどのようにフィールドできますか?

let data = new GraphQLObjectType({ 
    name:"Data", 
    fields: { 
     id: {type: GraphQLID}, 
     value: {type: GraphQLString} // TODO: allow for string as well as int 
    } 
}); 

がどのように私は「の値」フィールドは、int型の値だけでなく、文字列値を受け入れることができますか?

+0

'integer'と' string'を作った場合、どのような型のデータベースを考えますか? –

+0

@ p0k8_ GraphQLのポイントは、データベースの詳細を隠すことです。この値がデータベースAまたはB、またはファイルまたは他のAPIから来るかどうかは関係ありません。したがって、ユニオンタイプを持つことは完全に有効です。 –

+0

graphqlは 'int'を提供しますが、タイプのデータベーススキーマは' string'ですか? –

答えて

0

編集: この解決策は問題には適用されません。私はこのようなタイプを定義するために使用されていないよhttp://graphql.org/graphql-js/type/#graphqluniontype

、私はそれが以下のようなものであることを期待:それはあなたがGraphQLUnionTypeを見なければならないオブジェクト型ではなくスカラー

に対してのみ機能

var ValueType = new GraphQLUnionType({ 
    name: 'Value', 
    types: [ GraphQLString, GraphQLInt ], 
    resolveType(value) { 
    if (value instanceof string) { 
     return GraphQLString; 
    } 
    if (value instanceof number) { 
     return GraphQLInt; 
    } 
    } 
}); 

let data = new GraphQLObjectType({ 
    name:"Data", 
    fields: { 
     id: {type: GraphQLID}, 
     value: {type: ValueType} 
    } 
}); 
+0

'UnionType'はオブジェクト型しか持てません。' String'や 'Int'のような型を含むことはできません。 –

+0

私は間違いました。私はこれの非スカラー部分を見逃した。私はこの問題をユースケースに関して見ています:https://github.com/facebook/graphql/issues/215 –

+0

このケースではうまく動作しないので、この回答がupvoteを受け取るのは間違いです。私はそれが再び0に設定されることを要求する。私はまだこの変更を行うほどの評判はありません。 –

1

あなたのコメントによると、同じフィールドに文字列と整数の両方を配置できるNoSQLデータベースを使用していると言うと、GraphQLStringに行ってください。上記のオブジェクトの新しいインスタンスを作成するときvalueフィールドのまたはintをチェックするresolveメソッドを作成できます(もちろんGraphQLStringタイプのため文字列になりますが、それは"123"のような文字列になります)。 intに解析することができます) - これに応じて、データベースに保存する前に解析を実行できます。 一方、データベースからデータを取得するときは、graphql表現では常にstringと表示されます。これが当てはまらない場合は、単純な解決策になると思います。

しかし、あなたがこの命題に満足していない場合、私はあなたが望むようにGraphQLを騙すことができないことを恐れています。すべてのフィールドは単一の型定義しか取得できません。

関連する問題