2016-08-03 16 views
0

Ich bin ziemlich neu zu GraphQL und innerhalb meiner Root-Abfrage habe ich zwei Felder, die sehr ähnlich sind neben ihrer "Typ" -Eigenschaft, die ich gerne kombinieren würde.GraphQL Root Query: Gleiches Schema, verschiedene Typen

allPosts gibt ein Array von Post-Objekten zurück, während post einen einzelnen Post zurückgibt.

Jedes Feld ist das gleiche Schema verwendet wird, und die Lader/Ressourcen werden in die in diesen jeweiligen Bereichen auf der Grundlage des Arguments bestimmt geben.

const RootQuery = new graphql.GraphQLObjectType({ 
    name: 'Query', 
    description: 'Root Query', 
    fields: { 
     allPosts: { 
      type: new graphql.GraphQLList(postType), 
      args: { 
       categoryName: { 
        type: graphql.GraphQLString 
       } 
      }, 
      resolve: (root, args) => resolver(args) 
     }, 
     post: { 
      type: postType, 
      args: { 
       slug: { 
        type: graphql.GraphQLString 
       } 
      }, 
      resolve: (root, args) => resolver(args) 
     }, 
}); 

Ist es möglich, diese beiden Felder zu einem kombinieren und haben der Typ, der durch das übergebene Argument oder eine andere Variable bestimmt wird?

+0

Was meinen Sie mit "Jedes Feld verwendet das gleiche Schema"? Warum möchten Sie diese beiden Felder kombinieren, wenn sie unterschiedliche Zwecke haben? –

Antwort

2

Nein, das geht nicht!

Sobald Sie ein Feld als GraphQLList definieren, erhalten Sie immer ein Array. Es gibt keine Chance, dass Sie plötzlich eine object anstelle von array of bekommen. Gleiches gilt für den anderen Fall, wenn Sie das Feld als GraphQLObjectType (oder einen anderen Skalartyp) definieren und ein Array als Ergebnis erhalten möchten.

Diese beiden Felder haben wirklich unterschiedliche Zwecke.

Sie können jedoch immer eine Grenzwertlogik zu Ihrem Feld allPosts hinzufügen und das Ergebnis auf eins beschränken. Aber trotzdem erhalten Sie immer Array mit nur einem Beitrag