是否可以将GraphQL突变输出用作同一请求中单独突变的输入?

时间:2020-04-10 16:09:53

标签: graphql

我想使用GraphQL创建一个Car对象以及相关的对象CarOwner。

我希望能够在前端的单个请求中执行两项操作(createCar,createCarOwner)。

问题是,在创建carOwner时,我需要知道CarId,直到创建Car时我才知道。

在以后的请求中,一旦汽车被创建,我可能想在没有createCar的情况下调用createCarOwner,届时我将能够从前端提供carId。

这是我的模式:

type CarInput{
  make: String
  model: String
  color: String
}

type CarOwnerInput {
  carId: Int
  carOwnerName: String
}

type CreateCarResponse {
  carId: Int
}

type CreateCarOwnerResponse {
  carOwnerId: Int
}

type Mutation {
  createCar(car: CarInput) : CreateCarResponse
  createCarOwner(carOwner: CarOwnerInput) : CreateCarOwnerResponse
}

这是我从前端进行的首次尝试,这不是正确的方法:

mutation($car: CarInput, $carOwner: CarOwnerInput) {
    createCar(car: $car) { carId }
    createCarOwner(carOwner: $carOwner, carId: ##THIS IS WHERE I NEED THE CAR ID FROM createCar##) { carOwnerId }
}

修改架构后,我现在就解决了

mutation($car: CarInput, $carOwner: CarOwnerInput) {
    createCar(car: $car, carOwner: $carOwner) { carId }
}

我将CreateCarResolver更改为按顺序执行操作-首先是createCar,然后是createCarOwner。

我仍然有一个单独的CreateCarOwnerResolver,以用于是否曾经独立调用过createCarOwner。但是,我希望CreateCarResolver对CarOwners一无所知,我可以让CreateCarOwnerResolver在两种情况下都创建CarOwner。

我们如何告诉GraphQL先做一个突变,然后再将输出用于同一请求的一部分?这可能吗?

0 个答案:

没有答案