首页 > 解决方案 > 如何在 GraphQL 对象中组合多个字段

问题描述

我正在尝试我的第一个 Graphql Schema 设计。对象类型内的单个字段是否可能引用复杂对象?

enum KeyPrefix {                                                                                      
    WS                                                                                 
    WK                                                                                   
    SI                                                                                          
    ENT                                                                                                                                                      
}                                                                                                     

input generalKey {                                                                                    
    keyPrefix:KeyPrefix!                                                                              
    key:Int!                                                                                          
}                                                                                                     

type Item                                
{                                                                                                     
    pk: generalKey!                                                                                                                                                                              
    data: String!                                                                                     
    name: String!                                                                                     
}   

它给了我如下错误。Item.pk 的类型必须是 Output Type 但得到:generalKey!

标签: graphql

解决方案


input是保留用于描述 GraphQL 查询输入的关键字。您的架构应如下所示:

enum KeyPrefix {
  (your values)
}

type PrimaryKey {
  prefix: KeyPrefix!
  key: Int!
}

type Item {
  pk: PrimaryKey!
  data: String!
  name: String!
}

当您Query在 GraphQL 架构中定义 a 时,您将需要使用input,如下所示:

input PrimaryKeyInput {
  prefix: KeyPrefix!
  key: Int!
}

type Query {
  getItemByPrimaryKey(input: PrimaryKeyInput!): Item
}

这将允许客户要求Item使用与您相同的字段PrimaryKey


推荐阅读