11

私はGraphcoolを使用していますが、これは一般的なGraphQLの質問かもしれません。2 つのフィールドのいずれかを必須にする方法はありますか?

たとえば、Post タイプがあるとします。投稿は、グループまたはイベントのいずれかに添付する必要があります。これはスキーマで指定できますか?

type Post {
  body: String!
  author: User!
  event: Event // This or group is required
  group: Group // This or event is required
}

私の実際の要件はもう少し複雑です。投稿は、イベントに添付するか、グループと場所に添付する必要があります。

type Post {
  body: String!
  author: User!
  event: Event // Either this is required, 
  group: Group // Or both Group AND Location are required 
  location: Location 
}

したがって、これは有効です:

mutation {
  createPost(
   body: "Here is a comment",
   authorId: "<UserID>",
   eventId: "<EventID>"
  ){
    id
  }
}

これは次のとおりです。

mutation {
  createPost(
   body: "Here is a comment",
   authorId: "<UserID>",
   groupID: "<GroupID>",
   locationID: "<LocationID>"
  ){
    id
  }
}

しかし、これはそうではありません:

これは次のとおりです。

mutation {
  createPost(
   body: "Here is a comment",
   authorId: "<UserID>",
   groupID: "<GroupID>",
  ){
    id
  }
}
4

2 に答える 2

2

スキーマでこれを表す 1 つの方法は、unionsを使用することです。この場合、次のようになります。

type LocatedGroup {
  group: Group!
  location: Location!
}

union Attachable = Event | LocatedGroup

type Post {
  body: String!
  author: User!
  attachable: Attachable!
}
于 2020-06-19T08:40:39.407 に答える