Is it possible to fetch data from multiple tables using GraphQLList

前端 未结 1 1820
野的像风
野的像风 2021-01-26 01:51

In GraphQL we can write the object type in GraphQLList and fetch all the fields. I am using Association and it is joining the two tables but I am unable to fetch the field of bo

相关标签:
1条回答
  • 2021-01-26 02:12

    There's two main ways of achieving this in GraphQL: unions and interfaces.

    An interface is where two or more object types in your GraphQL schema share certain fields (characteristics). For example you might have a Product interface for all the items in your shop, where every product has a price, barcode, and shelfLocation. All your products, such as Shampoo, Bread, LawnChair would then implement this interface.

    interface Product {
      price: Float
      barcode: Int
      shelfLocation: ShelfLocation
    }
    
    type Bread implements Product {
      price: Float
      barcode: Int
      shelfLocation: ShelfLocation
      brand: String
      numberOfSlices: Int
      calories: Float
      bestBefore: Date
    }
    
    extend type Query {
      searchProducts(phrase: String!): [Product!]
    }
    

    A union is where you declare that something can return more than one object type, but those types don't have to have any properties in common.

    type Shark {
      name: String
      numberOfTeeth: Int
    }
    
    type Shoe {
      brand: String
      size: String
    }
    
    union SharkOrShoe = Shark | Shoe
    
    extend type Query {
      searchSharksAndShoes(phrase: String!): [SharkOrShoe!]
    }
    

    In both cases you can query type specific fields using fragments or inline fragments:

    query {
      searchProducts(phrase: "tasty") {
        # shared fields
        __typename
        price
        barcode
        shelfLocation { aisle, position }
    
        # type specific fields
        ... on Bread { brand }
        ...breadFrag
      }
      searchSharksAndShoes(phrase: "sleek") {
        # only the introspection fields are shared in a union
        __typename
    
        # type specific fields
        ... on Shark { name, numberOfTeeth }
        ...shoeFrag
      }
    }
    
    fragment breadFrag on Bread {
      barcode
      bestBefore
    }
    
    fragment shoeFrag on Shoe {
      brand
      size
    }
    

    You can learn more about this in the GraphQL schema documentation and read about GraphQLInterfaceType and GraphQLUnionType in the GraphQL.js documentation.

    0 讨论(0)
提交回复
热议问题