You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GraphQL Mutation疑问:newPrice如何映射到Produce的price字段?

解答:newPrice 如何传递到 Produce 的 price 字段

核心靠Resolver链和数据持久化层的配合完成,拆解成3个关键步骤:

1. Mutation Resolver 接收并触发更新

UpdateProducePrice 这个Mutation本身有对应的Resolver,是整个流程的入口:

  • 先从请求输入中拿到 produceItemId 和 newPrice
  • 接着调用数据库(或其他存储)的更新接口,把对应ID的商品价格替换成 newPrice

举个伪代码示例:

// UpdateProducePrice 的 Resolver 实现
const UpdateProducePrice = async (_, { input: { produceItemId, newPrice } }) => {
  // 调用数据库执行更新操作
  await db.produce.update({
    where: { id: produceItemId },
    data: { price: newPrice }
  });
  // 返回基础标识,供后续字段Resolver使用
  return { produceItemId };
};

2. 数据持久化层完成值的替换

这一步是值传递的关键:Resolver把newPrice传给数据库的更新语句,数据库定位到对应ID的记录,将price字段的值覆盖为newPrice并持久化。完成后,存储里的商品价格已经是最新值。

3. 返回字段的 Resolver 拉取最新数据

当Mutation返回UpdateProducePriceResponse时,其中的produceItem字段也有专属Resolver:

  • 从父级(即Mutation Resolver返回的对象)拿到produceItemId
  • 去数据库查询该ID对应的最新商品数据,此时返回的price就是更新后的newPrice

伪代码示例:

// UpdateProducePriceResponse 中 produceItem 字段的 Resolver
const produceItem = async (parent) => {
  // parent 是 Mutation Resolver 返回的 { produceItemId }
  return await db.produce.findUnique({
    where: { id: parent.produceItemId }
  });
};

关于Resolver的底层逻辑

Resolver本质是字段级的处理函数:每个GraphQL类型(包括Mutation、查询类型、自定义对象类型)的每个字段,都可以对应一个Resolver,负责获取或计算该字段的值。整个流程就是不同Resolver按调用顺序形成链条,完成「接收参数→更新数据→返回最新结果」的闭环。

内容的提问来源于stack exchange,提问作者Ananth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 20:02:42