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

2024-03-12

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

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

我一定有两个突变。

首先,我插入订单。在输出中,我检索了 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 ? ????
    }
  }) {
    product {
      idproduct
    }
  }
}

SQL 结构的真实示例:


user(iduser, othersFields);
scenarios(idscenario, iduser, name, otherFields);

cultA(idcultA, idscenario, ...); // this table need of idscenario field
cultB(idcultB, idscenario, ...); // this table need of idscenario field
cultC(idcultC, idscenario, ...); // this table need of idscenario field

我如何从上面 createOrder 的输出中检索 idorder ? ????

有可能的 ?

如果我忘记了一些信息,请不要犹豫。

提前致谢。

EDIT :

  • 使用 PostGraphile,插件“postgraphile-plugin-nested-mutations”或“自定义突变”(使用 PL PGSQL 函数)
  • 如果没有 PostGraphile,解析器(例如 @xadm)允许这种特定的嵌套突变。

恕我直言,您可以搜索“嵌套突变” - 此处未描述,您可以轻松找到示例/教程。

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

order{orderID,lines[{orderLineID}] } > 
  order_line{orderLineID, productID, anount, price} > 
    product {productID}

...在嵌套突变中创建(按相反顺序product>order_line>order)

产品不需要orderID,但是当你要求它时[在产品解析器中]

query product(id) {
  id
  orderedRecently {
    orderID
    date
    price
  }
}

...你可以简单地从以下位置获取它(或者更多 - 数组)orderLines and orders表 [使用简单的 SQL 查询 - 其中price将从中读取orderLines]

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

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

query product($id: ID!) {
  product(id: $id) {
    id
    orderedRecently {
      id
      date
      orderLine {
        id
        amount
        price
      }
    }
  }
}

在哪里输入orderedRecently: [Order!]- 数组可以为空,尚未重新排序

update

我稍微误解了你的要求(命名约定)......你已经有了正确的数据库结构。突变可以用复杂的数据/输入来“喂养”:

mutation {
  createOrder(input: {
    order: {
      ordername: "My order"
      products: [
        {
          quantity: 3
          idrefproduct: 25 
        },
        {
          quantity: 5
          idrefproduct: 28
        }
      ]
    }
  }) {
    order {
      id
      ordername
      products {
        id
        idrefproduct    
        quantity
      }
    }
  }
}

Your product is my orderLine, idrefproduct is product.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GraphQL - 在查询多个突变期间如何检索先前突变的 id 的相关文章

随机推荐

  • 如何计算Excel中某个范围内的值小于另一个单元格的单元格数?

    我的桌子如下所示 如果该月 team1 值小于 general 值 则其颜色为蓝色 如果该月 team2 值小于 general 值 则其颜色为粉红色 现在我想计算一年中每行有多少个蓝色和多少个粉色单元格 单元格 AK3 和 AL3 最合适
  • UIViewController半屏“抽屉滑轨”动画

    我想有一个UIViewController从右侧出现 幻灯片 动画 不像 Push segue 也不像 Facebook 应用程序 我希望新的 ViewController 滑到当前 ViewController 的顶部 而不是将其推开 但
  • 将 Google Chrome 的 Inspect Element 导入 R

    这个问题是基于我看到的另一个关闭的 https stackoverflow com questions 25110590 scraping ed gov aspx site using r xml rcurl当我了解到有关 Google C
  • 无法创建自定义 Spring Boot Starter/AutoConfiguration

    自定义启动项目命名为 hello service spring boot start 项目目录结构为 hello service spring boot start 目录结构 https i stack imgur com iHsvw pn
  • 如何禁用 UITextView 中的垂直滚动?

    我只想禁用 UITextView 中的垂直滚动同时保持水平滚动 我在这里发现了一些类似的问题 但是 它们似乎都不适合我 我尝试过的是 func scrollViewDidScroll scrollView UIScrollView let
  • 如何在 HTML 中将一张图像放置在另一张图像之上?

    我是 Rails 编程的初学者 尝试在页面上显示许多图像 有些图像要放在其他图像之上 为了简单起见 假设我想要一个蓝色方块 在蓝色方块的右上角有一个红色方块 但不要紧在角落 由于性能问题 我试图避免合成 使用 ImageMagick 等 我
  • 如何在dll中创建shared_ptr并通过工厂函数导出它?

    我有这段代码 class DLL API MyClassWrapper private MyClass m myClass public MyClassWrapper SIZE inputSize MyClassWrapper inline
  • Xampp 无法在 Mac OSX 上启动 MySQL 服务器?

    我使用的是 Mac OSX Mountain Lion Xampp 不允许我启动 MySQL 服务器 我已将 XAMPP 文件夹中的每个人和每个文件的权限设置为读 写 错误消息显示 操作无法完成 XAMPPErrorDomain 错误 1
  • CALayer 上的 hitTest - 如何找到哪个实际层被击中?

    情况 需要找到用户触摸了哪一层 问题 Apple 表示我们应该使用 CALayerpresentationLayer 进行命中测试 以便它代表当时屏幕上实际显示的内容 它捕获动画中间的信息等 除了 presentationLayer 不返回
  • Adobe AIR HTML 组件 - socket.io

    我正在尝试在 HTML 组件中加载一个网站 该组件使用 socket io 来获取一些流信息 它在 AIR 之外运行得很好 但在 HTML 组件内时 流式传输无法运行 它是从自身以外的域进行流式传输 我无法控制这两个站点 关于如何让流在 H
  • JavaScript 中是否有内置函数或插件来处理日期格式?

    目前我需要以 2012 年 10 月 5 日 类型格式输出日期 表示月份中的某一天 不带前导零 空格 完整月份名称 逗号 空格 四位数年份 我需要在 JavaScript 中执行此操作 我已经完成了这项工作 但在编写冗长的代码时 我突然想到
  • 使用 Microsoft AntiVirus API 进行文件上传扫描

    这里有人使用过 Microsoft Anti Virus API 来使用任何防病毒软件扫描文件上传吗 你的经验是什么 我想使用 mcafee trend 或其他众所周知的 AV 进行编程调用 Microsoft AntiVirus API
  • 编写 if 语句的更短、更 Pythonic 的方式

    我有这个 bc off if c page blog bc on print bc 有没有更Pythonic 和 或更短 的方式用Python编写这个 最短的应该是 bc on if c page blog else off 一般来说 这可
  • 与 Google Cloud 存储桶相比,指标浏览器中可以看到额外的存储桶

    与云存储存储桶探索相比 度量资源管理器中提供的额外存储桶信息很少 这似乎是旧的删除存储桶 但是 它出现在公制资源管理器中 它出现在这里有什么原因吗 此外 还有一些存储桶在存储资源管理器中可见 但在指标资源管理器中未显示 请注意 这不是在 2
  • 使用Java的ReferenceQueue

    Do SoftReference and WeakReference真的只有在创建为实例变量时才有帮助吗 在方法范围内使用它们有什么好处吗 另一个重要部分是ReferenceQueue 除了能够跟踪哪些引用被确定为垃圾之外 还可以Refer
  • C++11 如何代理只有名称和父类的类函数?

    我想知道是否可以使用 boost mpl preprocessor 或一些 noce C 11 功能从类类型和函数名称创建函数代理 假设我们有 inline void set email const std string value inl
  • Visual Studio 2012 项目始终过时(.cs 已修改)

    我们有一个项目在我们的解决方案中几乎所有其他项目中都使用 并且有一段时间整个解决方案总是重建 因为这个项目中的源文件似乎被修改了 1 gt 项目 实用程序 不是最新的 输入文件 utilities logging result cs 在输出
  • 按因子列估算 data.frame 组中的变量

    我有一个包含数字列的 data frame 这些列具有因子级别 我想通过这些因子级别来估算缺失值 让我解释一下 part id value a 1 23 4 a 2 23 8 a 3 45 6 a 4 34 7 a 5 Na b 1 45
  • Microsoft Media Foundation 中的 h264 无损模式

    我发现h264编解码器可以工作在无损压缩模式下 但微软媒体基金会支持吗 如果是这样 我如何将该编解码器的压缩模式从有损压缩模式切换到无损压缩模式 Windows 附带的 H 264 编码器的软件实现仅限于 H 264 配置文件 并且不提供无
  • GraphQL - 在查询多个突变期间如何检索先前突变的 id

    我想在同一个查询中运行多个突变 在下面的示例中 我创建了一个订单 并在创建了关于之前创建的产品记录之后 我一定有两个突变 首先 我插入订单 在输出中 我检索了 idorder 然后 我插入一个产品 这个产品 mutation createO