GraphQL-在查询多个突变期间,如何检索先前突变的id

GraphQL-在查询多个突变期间,如何检索先前突变的id,graphql,postgraphile,Graphql,Postgraphile,我想在同一个查询中运行多个突变 在下面的示例中,我创建了一个订单,并在创建了一个产品记录之后,创建了一个与以前创建的订单相关的产品记录 我一定有两个突变 首先,我插入一个命令。在输出中,我检索idorder等 然后,我插入一个产品。这个产品 mutation { createOrder(input: { order: { ordername: "My order" } }) { order { idorder ordername

我想在同一个查询中运行多个突变

在下面的示例中,我创建了一个订单,并在创建了一个产品记录之后,创建了一个与以前创建的订单相关的产品记录

我一定有两个突变

首先,我插入一个命令。在输出中,我检索idorder等

然后,我插入一个产品。这个产品

mutation {
  createOrder(input: {
    order: {
      ordername: "My order"
    }
  }) {
    order {
      idorder
      ordername
    }
  },
  createProduct(input: {
    product: {
      quantity: 3
      idrefproduct: 25 # link to refProduct
      idorder: XXXX         # how can i retrieve idorder from output of createOrder above ? IMHO you can search for "nested mutations" - not described here, you'll easily find examples/tutorials.

Proposed DB structure (n-to-n relation):

order{orderID,lines[{orderLineID}] } > 
  order_line{orderLineID, productID, anount, price} > 
    product {productID}
突变{
createOrder(输入:{
订单:{
订单名称:“我的订单”
}
}) {
命令{
我命令
订单名
}
},
createProduct(输入:{
产品:{
数量:3
idrefproduct:25#链接到refProduct
idorder:XXXX#如何从上述createOrder的输出中检索idorder?IMHO您可以搜索“嵌套突变”-此处未描述,您可以轻松找到示例/教程

建议的数据库结构(n-to-n关系):

…在嵌套突变中创建(按相反顺序产品>顺序行>顺序)

产品不需要
orderID
,但当您[在产品解析程序中]要求时

query product($id: ID!) {
  product(id: $id) {
    id
    orderedRecently {
      id
      date
      orderLine {
        id
        amount
        price
      }
    }
  }
}
…您只需从
订单行
订单
表[使用简单的SQL查询-其中
价格
将从
订单行
读取]中获取它(或者更确切地说是多个数组)

orderedRecently
解析器可以从父对象(通常是第一个参数)获取产品
id

当然,您可以(也应该)以
order
orderLine
类型返回数据(单独缓存,标准化):

其中type
orderedRecently:[Order!]
-数组可以为空,但尚未排序

更新 我有点误解了您的要求(命名约定)…您已经有了适当的数据库结构。突变可以通过复杂的数据/输入“反馈”:

您的
产品
是我的
订单行
idrefproduct
产品


createOrder
创建/插入
order
,然后使用其
id
创建产品记录(
order.id
idrefproduct
quantity
)。解析程序只能返回订单
id
或结构化数据(如上所述)。

可能正在查找我看到的“嵌套突变”“嵌套突变”,但是我没有为我的用例找到。我真的希望按顺序检索生成的id,因为我需要它来在同一查询中的产品和其他表中运行执行插入。您是否已经在“嵌套突变”中使用了变量?谢谢你的帮助,你为我花时间,这很好。但是,我不太懂很多想法。我的例子就是一个例子。我想检索“订单id”,因为之后,我将在多个表(表A、B、C等)的多个插入中使用它。在你的解释中,你写了“查询”但是我们谈论突变,我迷路了。网络上的例子与我的用例IMHO不匹配。我经常看到“我插入文章,然后插入子对象标记。这很好!”正如我写的…这不是关于嵌套突变的解释…是的,这很好,因为tag不需要文章id…你的产品不需要订单id,同样的…重新设计表/关系…或显示结构/关系谢谢你的耐心。我不是graphQL专家。我现在要编辑我的第一篇文章,关于表和关系。Hello@xadm,一个d谢谢你的帮助,这是真的,我的例子并不明确。我读了你的最新回复。我理解得更好。我会研究这个问题,明天会给出反馈。再次感谢。祝你周日愉快。
gql突变{createOrder(输入:{order:{ordername:“我的订单”产品:[{…},],cultA:[{…},]}}{order{id ordername products{id idrefproduct quantity}}}}
query product($id: ID!) {
  product(id: $id) {
    id
    orderedRecently {
      id
      date
      orderLine {
        id
        amount
        price
      }
    }
  }
}
mutation {
  createOrder(input: {
    order: {
      ordername: "My order"
      products: [
        {
          quantity: 3
          idrefproduct: 25 
        },
        {
          quantity: 5
          idrefproduct: 28
        }
      ]
    }
  }) {
    order {
      id
      ordername
      products {
        id
        idrefproduct    
        quantity
      }
    }
  }
}