graphql-参考突变中的其他字段

时间:2020-04-20 06:40:51

标签: graphql apollo hasura

我想创建2个相关对象,例如在1个位置和1个位置中,位置是对位置的引用,例如:

type Location {
    id: String
    name: String
}

type Place {
    id: String
    locationId: String
}

是否可以通过1个突变请求来执行此操作?目前,我正在使用2个单独的突变请求,如下所示:

mutation ($locationName: String!) {
  insert_Location(objects: {name: $locationName}) {
    returning {
      id
    }
  }
}

//in another request, use the id returned from the request above
mutation ($locationId: String!) {
  insert_Place(objects: {locationId: $locationId}) {
    returning {
      id
    }
  }
}

我知道一个变异中可能有多个字段,因此我可以在1个变异请求中创建2个 Locations ,如下所示。

mutation ($locationName: String!) {
  location1: insert_Location(objects: {name: $locationName}) {
    returning {
      id
    }
  }

  location2: insert_Location(objects: {name: $locationName}) {
    returning {
      id
    }
  }
}

但是,如果我要创建1个位置和1个位置,是否可以检索创建的位置ID并将其传递给第二个字段以创建位置?

1 个答案:

答案 0 :(得分:0)

供以后参考:

正如@Xetera所指出的那样,由于这两种类型具有外键关系,因此您可以进行嵌套的插入变异,由hasura负责设置外键值。就我而言,它看起来像:

mutation ($locationName: String!) {
  insert_Place(
    objects: {
      Location: {data: {name: $locationName}}, //hasura will create Location and assign the id to Place.locationId
    }
  ) {
    returning {
      id
    }
  }
}

此处的文档可供进一步阅读:https://hasura.io/docs/1.0/graphql/manual/mutations/insert.html#insert-an-object-along-with-its-related-objects-through-relationships